ArrayList 、Vector 和 LinkedList 的区别
1. 存储结构
- ArrayList:数组,可直接根据下标来快速查找;但增删慢,需要修改后面的元素
- Vector:数组,可直接根据下标来快速查找;但增删慢,需要修改后面的元素
- LinkedList:双向链表,增删方便,仅需处理结点之间的引用;查询慢,需要遍历对比
2. 并发安全与否
- ArrayList:采用异步处理,线程不安全,性能较高
- Vector:采用 synchronized 修饰增删查改方法,线程安全,性能较低(锁的粒度太粗)
- LinkedList:采用异步处理,线程不安全
3. 初始化大小,扩容
- ArrayList:采用懒加载策略,有数据需要添加进顺序表时才初始化内部数组;初始化大小为10,扩容为原数组长度的1.5倍。
- Vector:在实例化对象就初始化内部数据;初始化大小为10,扩容为原数组长度的2倍。
- LinkedList:不需要连续的空间,大小不定;直接将引用指向下一个引用。
4. 所继承接口
都实现了List接口,也就是说都实现了get(int location)、remove(int location)等“根据索引值来获取、删除节点的函数”。数组结构根据下标取值很容易,LinkedList双向列表的实现也比较简单,通过计数索引值实现,从链表长度的1/2开始查找,下标大了就从表头开始找,小了就从表尾开始找。