ArrayList
1,ArrayList继承了AbstractList抽象类,实现类List、RandomAccess、Cloneable、Serializable接口,其中要解释的是RandomAccess,实现RandomAccess的集合可以进行快速随机访问,详细解释 :https://blog.csdn.net/weixin_39148512/article/details/79234817
2,ArrayList的内部数据结构是Object[],元素保存在对象数组里。
3,ArrayList的默认大小为10,超出容量时自动增长,增长到原来容量的1.5倍,大小保存在size属性里。
4,ArrayList根据索引查找的效率是真的高,插入和删除元素的效率不能一概而论,如果在最后面添加元素,效率很高,如果在里面插入元素就要移动后面的元素,效率比较低;删除元素同理。
Vector
1,Vector继承了AbstractList抽象类,实现类List、RandomAccess、Cloneable、Serializable接口,和ArrayList完全相同。
2,Vector的内部数据结构是Object[],元素保存在对象数组里。
3,Vector的默认大小为10,超出容量时自动增长,增长到原来容量的2倍,大小保存在elementCount属性里,要通过size()方法 获取,这点和ArrayList有区别。
4,Vector在很多方法上使用了Synchronized保证线程安全,因此Vector效率低于ArrayList。
LinkedList
1,LinkedList继承AbstractSequentialList实现了List、Deque、Cloneable、Serializable接口,其中 Deque是双端队列的接口,LinkedList内部数据结构是双端队列。
2,LinkedList的大小保存在size属性里,因为LinkedList是链表实现的所以有多少元素集合就有多大,不存在空元素的情况。
3,LinkedList根据索引查找的效率低,因为要从表头或者从表尾开始遍历(如果索引靠近表头就从表头开始,如果靠近标为就从表位开始),插入或删除元素的效率也要分情况,操作靠近表头或者表尾的数据效率肯定高,因为需要遍历的数据少。