java非并发容器ArrayList 和 LinkedList 优缺点比较及其实现源码分析

ArrayList
顾名思义,arraylist内部实现为维护一个数组
其优点为:随机存取元素的效率为o(1)

缺点:由于内存必须是连续的,所以插入一个元素的效率较低,删除一个非结尾的元素效率较低
其具体Arraylist插入的内部实现,根据源码可知
如果当前数组长度不够插个一块新的元素,则新建一块其大小为当前大小*1.5+1的数组,
并拷贝当前元素到新的数组

其具体arraylist删除元素的内部实现,根据其源码可知
若要删除的元素为最后一个元素则直接设置最后一个元素的值为null 并且size减一
否则移动从要删除元素后面的所有元素前进一格,设置最后一个元素的值为null 并且size减一

LinkedList
顾名思义,LinkedList内部实现为维护一个链表(双端链表)
LinkedList是一个标准的双端链表,实际下面的优缺点是数据结构的基本知识

其优点为:可以充分利用计算机内存空间,实现灵活的内存动态管理
由于内存不必连续,链表在插入的时候可以达到O(1)的复杂度

其缺点为: 查找一个节点或者访问特定编号的节点则需要O(n)的时间
ArrayList相应的时间复杂度分别是O(logn)和O(1)。

    原文作者:java源码分析
    原文地址: http://www.cnblogs.com/duchanggang/p/4624424.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞