Vector、ArrayList和LinkedList

本文详细对比了Java中List接口的几种实现方式:Vector、ArrayList和LinkedList。分别从数据结构、线程安全性、扩容机制、查询效率等方面进行了阐述,并对它们在不同场景下的适用性给出了建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

List中元素有序,且是可以重复的。(有序是指元素存入的先后顺序与输出的先后顺序是一致的)
  • Vector

    内部是数组数据结构,是线程安全的。是最早出现的list接口(现在几乎不怎么使用)。Vector是百分百延长数组,即新数组的长度是原来数组长度的2倍。

  • ArrayList

    内部是数组结构,是线程不安全的。替代了Vector,遇到多线程情况,可以通过加锁来实现线程安全。ArrayList是百分之五十延长,即新数组的长度是原来数组长度的1.5倍,效率比Vector高,浪费空间较少。查询速度快。(ArrayList使用new操作初始化时会构造一个初始容量为10的空列表, ArrayList中add方法添加的都是Object,可以添加任何类型的对象,但是最终都会被提升为Object类型,因此在取出元素时,需要进行类型的强转,即Object类型转换为本来的类型)

  • LinkedList

    内部是链表结构的,是线程不安全的,但是效率高。List中除了Vector都是不安全的。增删元素特别快。

注意:

  1. 数组长度可变的原理是创建一个新数组,将原来的数组内容复制到新数组中去,增加数组的长度。
  2. ArrayList和LinkedList的查询功能都是从第一个元素开始,但是ArrayList中所有元素是存储在同一内存区的,遍历速度快,而LinkedList中的所有元素并不是存储在同一内存区,所以速度很慢。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值