ArrayList:
继承AbstractList 并且实现了List,RandomAccess,Cloneable, Serializable接口。
·以大小可变的“数组”来实现List接口。
·容量能够动态增长。
1)ArrayList实际上是通过数组保存数据,构造ArrayList时,若使用默认构造函数,则ArrayList的默认初始容量大小为10;
2)当ArrayList容量不足以容纳全部元素时,ArrayList会重新设置容量:新的容量=“(原始容量x3)/2 + 1”。所以数组容量动态增长的数量变化:10—>16—>25—>38—>58—>88—>·········
·三者中效率最高,查询速度快,遍历ArrayList时,使用随机访问(即,通过索引序号访问)效率最高,而使用迭代器时的效率最低!
·不具有线程安全性,建议在单一线程中使用ArrayList。多线程中可以选择Vector。
·判断元素是否存在,或删除元素,底层依据的是equals方法。
LinkedList:
·LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。
LinkedList 实现 List 接口,能对它进行队列操作。
LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用。
LinkedList 实现了Cloneable接口,即覆盖了函数clone(),能克隆。
LinkedList 实现java.io.Serializable接口,这意味着LinkedList支持序列化,能通过序列化去传输。
·数据结构是双向的链式结构。
·分配内存空间不是必须是连续的。
·增删元素的速度快。时间复杂度O(1)。
·访问比较慢,必须得从第一个元素开始遍历,时间复杂度为O(n)。
·可以模拟实现堆栈、队列或双端队列。
·不具备线程安全性。
Vector:
继承于AbstractList,实现了List, RandomAccess, Cloneable接口。
·实现自动增长的对象数组。
·线程安全。