ArrayList 、Vector 和 LinkedList 的区别

1. 存储结构

  • ArrayList:数组,可直接根据下标来快速查找;但增删慢,需要修改后面的元素
  • Vector:数组,可直接根据下标来快速查找;但增删慢,需要修改后面的元素
  • LinkedList:双向链表,增删方便,仅需处理结点之间的引用;查询慢,需要遍历对比

2. 并发安全与否

  • ArrayList:采用异步处理,线程不安全,性能较高
  • Vector:采用 synchronized 修饰增删查改方法,线程安全,性能较低(锁的粒度太粗)
  • LinkedList:采用异步处理,线程不安全

3. 初始化大小,扩容

  • ArrayList:采用懒加载策略,有数据需要添加进顺序表时才初始化内部数组;初始化大小为10,扩容为原数组长度的1.5倍。
  • Vector:在实例化对象就初始化内部数据;初始化大小为10,扩容为原数组长度的2倍。
  • LinkedList:不需要连续的空间,大小不定;直接将引用指向下一个引用。

4. 所继承接口
ArrayList 、Vector 和 LinkedList 的区别
都实现了List接口,也就是说都实现了get(int location)、remove(int location)等“根据索引值来获取、删除节点的函数”。数组结构根据下标取值很容易,LinkedList双向列表的实现也比较简单,通过计数索引值实现,从链表长度的1/2开始查找,下标大了就从表头开始找,小了就从表尾开始找。