美文网首页
ArrayList和LinkedList对比

ArrayList和LinkedList对比

作者: 秋实_218f | 来源:发表于2019-01-16 16:01 被阅读0次

~、结构

ArrayList位数组结构,LinkedList为双向链表结构。

~、空间

ArrayList有固定容量,超出容量后需要扩容,在数组尾部可能保存有占位的null元素

LinkedList无固定容量,但每个元素都放在节点中,每个节点都有2个额外的定位指针(prev 和 next),第一个和最后一个节点的prev和next都指向null

~、方法及效率对比

—:add

1、add()

ArrayList在数组的最后追加,额外操作仅仅是数组满了的扩容

LinkedList在链表的最后追加同addLast(),每次创建一个新节点(新节点的prev指针指向之前的最后一个节点last),last的next指针指向新节点。每次都需给2个指针赋值。效率不如ArrayList

2、add(int index, E element)

ArrayList在数组的指定index位置添加元素element,每次都需调用System.arraycopy() 拷贝数组

LinkedList只是创建一个prev指针指向index前一个元素,next指针指向index元素的节点,并将index前节点的next指针和index节点的prev指针指向新节点。与前面的在最后添加差不多,此时效率要远远高于ArrayList

3、在结构最前面添加,ArrayList只能用 add(0, e)。而LinkedList除add(0, e)外还可以用addFirst(e)。同样LinkedList效率高于ArrayList

—:get

1、get(int index)

ArrayList直接取数组下标得到元素值

LinkedList需要遍历链表取到index位置的节点,再得到节点的item值。效率受链表长度和index在链表位置的影响

2、get遍历

for遍历

ArrayList数组长度及循环次数,一个元素只循环一次。LinkedList每取一个数都重新遍历链表,一个元素最多遍历 链表长/2次。

foreach遍历

先将集合转Iterator,循环次数都为元素的个数。

ArrayList2种方式都可,LinkedList要求使用foreach

—:remove

1、remove(int index)

ArrayList删除指定下标的元素,需调用System.arraycopy()函数,再将最后一个元素赋null

LinkedList删除指定下标的节点,改变index节点的prev节点的next为index的next,index的next节点的prev为index的prev,再清理index节点的item为null。效率也比ArrayList好。

2、remove(Object o)

删除数组或链表中第一次出现的与o相等的元素,先查找再删除,删除步骤同第一点。

3、remeve(),removeFirst(),removeLast()

3个方法都只是LinkedList所有。removeFirst()和remove()方法删除第一个节点。removeLast()删除最后一个节点。

—:set

1、set(int index, E element)

替换index位置的元素为element。

ArrayList直接取数组下标赋值。

LinkedList首先遍历链表取到index位置的节点,再将节点的item赋值。如果链表比较大切index在链表中间位置会很浪费时间。

相关文章

  • Java (集合 List)

    1.对比Arraylist (插入顺序)和 LinkedList(插入顺序) 特性: ArrayList(末尾附近...

  • ArrayList和LinkedList对比

    ~、结构 ArrayList位数组结构,LinkedList为双向链表结构。 ~、空间 ArrayList有固定容...

  • Java基础

    常见对比 ArrayList, LinkedList, Vector ArrayList 基于动态数据,1.5倍扩...

  • Java中级面试题

    List和Set比较,各自的子类比较对比一:Arraylist与LinkedList的比较 1、ArrayList...

  • ArrayList 和 LinkedList测试

    ArrayList 和 LinkedList测试1.ArrayList 和 LinkedList 新增元素操作测试...

  • Java自学-集合框架 ArrayList和LinkedList

    ArrayList和LinkedList的区别 步骤 1 : ArrayList和LinkedList的区别 Ar...

  • 几个面试题

    ArrayList 和LinkedList的区别 平时还真没有去看过ArrayList和LinkedList的源码...

  • java基本知识

    1、描述一下ArrayList和LinkedList各自实现和区别ArrayList是数组,LinkedList是...

  • 面试总结-2(网传桔厂面试题)

    一.ArrayList和LinkedList区别及使用场景 LinkedList和ArrayList的差别主要来自...

  • 集合

    1、ArrayList与LinkedList的异同 同: 是否可扩展:ArrayList和LinkedList都属...

网友评论

      本文标题:ArrayList和LinkedList对比

      本文链接:https://www.haomeiwen.com/subject/smmmdqtx.html