文章目录
- 一、ArrayList和LinkedList查询之间的区别
- 二、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
- 你需要通过循环迭代来访问列表中的某些元素。
- 需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。
- 做双端队列使用