Vector:底层数据类型是数组,线程安全,一般情况下查快增删慢。
ArrayList:底层数据类型是数组,非线程安全,一般情况下查快增删慢(因为非线程安全所以效率高于Vecotr)。
LinkedList:底层数据类型是双向链表,非线程安全,一般情况下查慢增删快。
Vector和ArrayList的区别:主要Vector在很多方法前都加了同步锁,所以在执行这些方法时效率低于ArrayList
ArrayList和LinkedList的区别:主要在于底层数据结构数组和双向链表的区别。数组在查询时根据下标索引查询速度很快,双向链表需要从端点不断的移动指针进行遍历速度比较慢,特别是需要被遍历的数据位于中间位置时;数组在增加操作时达到数组容量的情况下需要对数组扩容,删除操作时可能需要把被删除位置后面的数据迁移需要改变数组结果,所以增删的效率会受影响,双向链表在增删操作时都只需要改变指针信息,所以效率比较高。
ArrayList的底层数据结构:
ArrayList的查询:直接通过数组下标查询所以速度快
ArrayList的添加:达到数组容量时需要做扩容,所以会影响效率
ArrayList的删除:如果删除的数据所在的数组下标后面还有数据,那后面的数据需要迁移,所以影响效率
LinkedList的底层数据结构:
LinkedList的查询:需要链表的端点不断的移动指针进行遍历查询,所以效率较低
LinkedList的添加:链表没有容量信息,添加时只需要在端点新增节点,然后改变指针信息,所以效率很高
LinkedList的删除:删除的时候也是需要做遍历找到要删除的节点,但是在删除节点操作也只要改变指针信息,所以影响效率的关键在删除节点的位置。