Vector、ArrayList和LinkedList区别

前言:Vector、Array List和LinkedList都是来自java.util包中,均为可伸缩数组,即可动态改变长度的数组。

区别:

1、实现方式

1)  ArrayList和Vector的底层都是用Object[ ] array实现的,在内存中开辟一块连续的空间来存储,因此他们支持用序号(下标)来访问元素,索引数据的速度比较快,但是插入元素时需要移动容器中的元素,插入数据的速度比较慢。另一方面,ArrayList和Vector都有一个初始容量,当存储的元素满时,需要动态扩容,为提高效率,每次不时只扩充一个单元,而是成倍扩充,不同的是Vector默认扩充为原来的2倍(每次扩充空间的大小是可以设置的),而ArrayList默认扩充为原来的1.5倍(没有提供设置空间扩容的方法)。

2)  LinkedList是采用双向列表来实现,对数据的索引需要从列表头开始遍历,因此用于随机访问时效率比较低,但是插入元素时不需要移动其他元素,因此插入元素效率很高

2、线程安全性对比

ArrayList与Vector最大的区别就是synchronization的使用。ArrayList没有一个方法是同步的,而Vector的绝大部分方法(add、insert、remove、set、equals、hashcode等)都是直接或间接同步的,所以Vector是线程安全的,ArrayList不是线程安全的。有得有失,Vector在性能上也要略逊于ArrayList。

LinkedList不是线程安全的容器。

3、选用原则

①当对数据的主要操作为索引或在末端增加、删除元素时,使用ArrayList或Vector,使用ArrayList效率比较高;

②当对数据的主要操作为插入或是参数操作时,使用LinkedList效率比较高;

③在多线程中使用时,选用Vector较为安全

4、分别用一句表总结

ArrayList底层用数组实现,每次扩容1.5倍,线程不安全,插入慢,但是索引快;

Vector底层也是数组实现,每次扩容2倍,线程安全,插入慢,索引快,但是整体性能略逊于ArrayList;

LinkedList底层用双向列表实现,线程不安全,插入快,索引慢。

猜你喜欢

转载自blog.csdn.net/u012005549/article/details/82787777