ArrayList 和 LinkedList 的区别(超详细易懂)


一、ArrayList和LinkedList查询之间的区别

  • LinkedList 是基于链表实现的,适合插入。
  • ArrayList是基于数组实现的,适合查询。

ArrayList的优点:对于ArrayList,它真正的优点是按下标查询元素,相比于LinkedList,LinkedList也可以按下标查询元素,但是LinkedList需要对底层链表进行遍历,才能找到指定下标的元素,而ArrayList不用,指定下标进行查询,ArrayList 优于 LinkedList,所以这是ArrayList的优点。

但是,如果我们讨论的是获取第一个元素,或最后一个元素,ArrayList和LinkedList在性能上是没有区别的,因为LinkedList中有两个属性分别记录了当前链表中的头结点和尾结点,并不需要遍历链表。

以上,是对于ArrayList和LinkedList在查询方面的区别

二、ArrayList和LinkedList插入之间的区别

ArrayList 的添加操作是存在扩容的情况,并且对于 ArrayList 的添加操作要分情况考虑。

  • 在最后的位置添加元素,不需要移动,需要扩容
  • 在指定的位置添加元素,指定位置的元素及后面的元素,均往后移动;效率相对较慢。(因为指定了位置,所以不用去遍历查找,但是需要移动元素)
  • 可以插入到指定下标位置,或者数组末尾,这种插入普通情况下是很快的,但是如果某次插入操作触发了扩容,那么本次插入就增加了额外的扩容成本。

LinkedList 的添加操作是不存在扩容的情况。

  • 如果是插在链表的头部或者是尾部都是很快的,因为LinkedList中有单独的属性记录的链表的头结点和尾结点,不过,如果是插在指定下标位置,那么就需要遍历链表找到指定位置,从而降低了效率。

三.总结

以下情况使用 ArrayList

  • 频繁访问列表中的某一个元素。
  • 只需要在列表末尾进行添加和删除元素操作。

以下情况使用 LinkedList

  • 你需要通过循环迭代来访问列表中的某些元素。
  • 需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。
  • 做双端队列使用

猜你喜欢

转载自blog.csdn.net/weixin_54040016/article/details/127946278