ArrayList、LinkedList与Vector的区别
在实际开发的过程中,我们经常使用到这三个集合,了解它们的特点对我们的开发会有很大的帮助
【1】底层数据结构
集合 |
底层数据结构 |
ArrayList |
动态数组 |
LinkedList |
双向链表 |
Vector |
动态数组 |
(1)由于ArrayList和Vector底层都是基于动态数组的,因此我们可以通过使用序号来索引元素
【2】各自优势与劣势
集合 |
优势 |
劣势 |
ArrayList |
随机访问 |
增删操作 |
LinkedList |
增删操作 |
随机访问 |
Vector |
随机访问 |
增删操作 |
(1)由于动态数组中的元素在内存中存储的位置是连续的,因此随机访问效率比较高。但每删除一个元素,都要把该元素后面的所有元素向前移动,效率不高。
(2)双向链表中的元素存储的位置是不连续的,各个节点仅仅靠指针连接,在进行随机访问时,必须先从头节点开始遍历。但在节点的删除操作上,只需要断开这个节点两旁的指针再进行指针连接即可,不需要移动元素。
【3】多线程情况下
集合 |
特点 |
ArrayList |
线程不安全 |
LinkedList |
线程不安全 |
Vector |
线程安全 |
(1)Vector中的方法类似于ArrayList,但大部分都加了同步处理,所以Vector的效率略低于ArrayList
PS:线程安全的类有哪些?
有一个记法:喂,她
其实就是V、S、H、E
记法 |
类 |
V |
Vector |
S |
Stack |
H |
HashTable |
E |
Enumeration |
【4】初始容量与扩容规则
集合 |
初始容量 |
扩容规则 |
ArrayList |
10 |
原来的1.5倍 |
LinkedList |
0 |
每次加1 |
Vector |
10 |
原来的2倍 |
【5】实现与继承
集合 |
实现了 |
继承了 |
ArrayList |
List |
AbstractList |
LinkedList |
List Deque |
AbstractSequentialList |
Vector |
List |
AbstractList |