ArrayList,LinkedList和Vector的异同总结

三者的简介

简介就直接截图了

区别:

1.ArrayList和Vector基于动态数组的数据结构,LinkedList基于链表的数据结构

2.由于ArrayList和Vector是基于数组的,内存连续,索引速度快,因此它们在进行取值(get),赋值(set),修改操作的时候比较快,但是在进行添加(add)和删除(remove)操作的时候就比较慢了,因为增删一个元素后面的所有元素都需要改变位置(尤其是添加元素的时候还要判断原数组的容量够不够,不够的话要扩容为原来的1.5倍,即创建一个新数组).LinkedList反之.

3.ArrayList和LinkedList线程不安全,是异步的;Vector线程安全,是同步的.线程安全的性能比较差.

4.ArrayList的默认初始容量是16,每次扩容默认增加一半;Vector是10,每次扩容默认增加一倍

5.ArrayList和Vector实现了RandomAccess接口,LinkedList没有,因此ArrayList和Vector使用下标比使用迭代器 遍历更快

 

题外话:

1.如果存储的数据比较多,与其一次一次地扩容,不如初始化的时候设置更大一点的,更合适的初始容量更节约时间

2.如果数据量大,使用Vector比ArrayList效率更高

3.如果对执行效率要求高,可以直接使用数组(Array),因为使用数组(Array)避免了同步、额外的方法调用和不必要的重新分配空间的操作。

4.在规定方法的返回值类型的时候,尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要将ArrayList换成LinkedList时,客户端代码不用改变。这就是针对抽象编程

5.ArrayList和Vector都实现了RandomAccess接口,因为遍历这两种类型的时候使用下标查找数据比较快,而不是使用迭代器

 

参考链接:

在总结这篇博客的时候参考了很多大神的文章,收获了很多,不对之处望指正.

下面这些文章使我受益匪浅,在总结这篇博客的时候越搜越多,如果看这篇博客看得比较懵,建议先看以下文章.

双向链表代码实现和详解—java实现             

https://blog.csdn.net/WeiJiFeng_/article/details/79799111

Vector详细介绍和使用示例                         

https://www.cnblogs.com/skywang12345/p/3308833.html

java中ArrayList详解                                      

http://www.cnblogs.com/qingchunshiguang/p/6103731.html

ArrayList,LinkedList,Vector的区别               

https://www.cnblogs.com/yw-ah/p/5841327.html

ArrayList集合实现RandomAccess接口有何作用?为何LinkedList集合却没实现这接口?

https://blog.csdn.net/weixin_39148512/article/details/79234817

java集合系列之LinkedList

https://www.cnblogs.com/lintong/p/4374292.html

ArrayList和LinkedList的区别(底层数据结构)

https://www.cnblogs.com/jiaozi-li/p/8338252.html

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值