ArrayList与LinkedList
共同点: 实现了List接口,线性表
不同点:ArrayList基于动态数组,LinkedList基于链表(链式存储结构)。
底层实现的不同造成了数据存储与读取的不同
一、读取
ArrayList按下标查询元素,时间复杂度为O(1)。
LinkedList遍历整个链表,时间复杂度为O(n)。相较于ArrayList效率更低。
二、数据存储
ArrayList增加与删除元素时,除了尾部新增、尾部删除,需要移动新增和删除元素后面的每一个元素。当新增元素时,还可能触发扩容。
LinkedList增加与删除元素时,不会对原表产生影响,也不会有扩容一说。较于ArrayList效率更高。
综上:ArrayList使用在查询比较多,但是插入和删除比较少的情况,而LinkedList用在查询比较少而插入删除比较多的情况。
ArrayList与Vector
共同点: 实现了List接口。
不同点:ArrayList线程不安全,触发扩容机制时,扩容为原来的1.5倍;Vector线程安全,触发扩容机制时,扩容为原来的2倍。