三者的简介
简介就直接截图了
区别:
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