ArrayList,LinkedList和Vector的区别

他们三个都是属于java.util包中的List接口,均为可以伸缩的数组可以动态改变长度


ArrayList和Vector 

ArrayList和Vector都是基于Object[] array实现的,他们会在内存中开辟连续地址,由于地址连续他们支持用下标搜索数据,同时索引数据速度比较快,其中Vector每次扩容为当前大小的两倍(每次扩充大小可以变化),ArrayList默认扩充1 .5倍且不可设置变化。

ArrayList和Vector的区别就是ArrayList是线程不安全的,Vector是线程安全的,Vector中的方法都是同步方法(synchronized),所以ArrayList的执行效率要高于Vector,它也是用的最广泛的一种集合。


 ArrayList和LinkedList

我们重点比较一下ArrayList和LinkedList的区别,其实ArrayList和LinkedList之间的区别就是数组和双向链表之间的区别。

ArrayList基于动态数组实现的非线程安全的集合;LinkedList基于链表实现的非线程安全的集合。

对于随机index访问的get和set方法,一般ArrayList的速度要优于LinkedList。因为ArrayList直接通过数组下标直接找到元素;LinkedList要移动指针遍历每个元素直到找到为止。

新增和删除元素,一般LinkedList的速度要优于ArrayList。因为ArrayList在新增和删除元素时,可能扩容和复制数组;LinkedList实例化对象需要时间外,只需要修改指针即可。

LinkedList集合不支持 高效的随机随机访问(RandomAccess)

ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间

ArrayListVectorLinkedList
底层实现方式Object数组Vector是基于synchronized实现的线程安全的ArrayList.
Vector在扩容时会提高一倍,而ArrayList则是增加50%
双向循环链表(JDK1.6之前)
双向链表(JDK1.7取消了循环)
读写机制插入:超过当前数组预定义的最大值时,数组需要扩容,扩容过程需要调用底层System.arraycopy()方法进行数组复制操作
删:删除元素时并不会减少数组的容量,如需缩小容量,可调用trimToSize()方法,在查找元素时要遍历数组,对非null的元素采取equals的方式查找
插入:须创建一个新的Entry对象,并更新相应元素的前后元素的引用
在查找元素时,需遍历链表
在删除元素时,要遍历链表,找到要删除的元素,然后从链表上将此元素删除
读写效率ArrayList对元素的增加和删除都会引起数组的内存分配空间动态发生变化,对其进行插入和删除速度较慢,但检索速度快LinkedList由于基于链表方式存放数据,增加和删除元素的速度较快,但检索速度较慢
线程安全性非线程安全非线程安全

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Weber77

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值