几个List的增删查总结比较

Vector:底层数据类型是数组,线程安全,一般情况下查快增删慢。

ArrayList:底层数据类型是数组,非线程安全,一般情况下查快增删慢(因为非线程安全所以效率高于Vecotr)。

LinkedList:底层数据类型是双向链表,非线程安全,一般情况下查慢增删快。

 

Vector和ArrayList的区别:主要Vector在很多方法前都加了同步锁,所以在执行这些方法时效率低于ArrayList

几个List的增删查总结比较_第1张图片

ArrayList和LinkedList的区别:主要在于底层数据结构数组和双向链表的区别。数组在查询时根据下标索引查询速度很快,双向链表需要从端点不断的移动指针进行遍历速度比较慢,特别是需要被遍历的数据位于中间位置时;数组在增加操作时达到数组容量的情况下需要对数组扩容,删除操作时可能需要把被删除位置后面的数据迁移需要改变数组结果,所以增删的效率会受影响,双向链表在增删操作时都只需要改变指针信息,所以效率比较高。

ArrayList的底层数据结构:

几个List的增删查总结比较_第2张图片

ArrayList的查询:直接通过数组下标查询所以速度快

几个List的增删查总结比较_第3张图片

ArrayList的添加:达到数组容量时需要做扩容,所以会影响效率

几个List的增删查总结比较_第4张图片

ArrayList的删除:如果删除的数据所在的数组下标后面还有数据,那后面的数据需要迁移,所以影响效率

几个List的增删查总结比较_第5张图片

几个List的增删查总结比较_第6张图片

LinkedList的底层数据结构:

几个List的增删查总结比较_第7张图片

LinkedList的查询:需要链表的端点不断的移动指针进行遍历查询,所以效率较低

几个List的增删查总结比较_第8张图片几个List的增删查总结比较_第9张图片

LinkedList的添加:链表没有容量信息,添加时只需要在端点新增节点,然后改变指针信息,所以效率很高

几个List的增删查总结比较_第10张图片几个List的增删查总结比较_第11张图片

LinkedList的删除:删除的时候也是需要做遍历找到要删除的节点,但是在删除节点操作也只要改变指针信息,所以影响效率的关键在删除节点的位置。

几个List的增删查总结比较_第12张图片

几个List的增删查总结比较_第13张图片

你可能感兴趣的:(JAVA,数据结构,java)