-
Notifications
You must be signed in to change notification settings - Fork 1.3k
ArrayList、LinkedList 和 Vector 的区别
cxuan edited this page Jun 15, 2020
·
1 revision
这也是一道老生常谈的问题了
ArrayList、LinkedList、Vector 都是位于 java.util
包下的工具类,它们都实现了 List 接口。
- ArrayList 的底层是动态数组,它是基于数组的特性而演变出来的,所以ArrayList 遍历访问非常快,但是增删比较慢,因为会涉及到数组的拷贝。ArrayList 是一个非线程安全的容器,在并发场景下会造成问题,如果想使用线程安全的容器的话,推荐使用
Collections.synchronizedList
;ArrayList 在扩容时会增加 50% 的容量。 - LinkedList 的底层是双向链表,所以 LinkedList 的增加和删除非常快,只需把元素删除,把各自的指针指向新的元素即可。但是 LinkedList 遍历比较慢,因为只有每次访问一个元素才能知道下一个元素的值。LinkedList 也是一个非线程安全的容器,推荐使用
Collections.synchronizedList
- Vector 向量是最早出现的集合容器,Vector 是一个线程安全的容器,它的每个方法都粗暴的加上了
synchronized
锁,所以它的增删、遍历效率都很低。Vector 在扩容时,它的容量会增加一倍。