ArrayList & LinkedList
MoMo Lv5

ArrayList

底层数据结构:ArrayList 基于动态数组实现,内部维护一个 Object 数组,默认初始容量为 10,当元素数量超过当前容量时会自动扩容。

  • 随机访问效率高:由于基于数组,ArrayList 支持通过索引快速访问元素,时间复杂度为 O(1)。
  • 插入和删除效率低:在中间或开头插入/删除元素时,需要移动后续元素,时间复杂度为 O(n)。
  • 适合随机访问:对于频繁随机访问元素的场景,ArrayList 性能更好。

LinkedList

底层数据结构:LinkedList 基于双向链表实现,每个节点包含数据元素和指向前后节点的引用。

  • 插入和删除效率高:在任意位置插入/删除元素时,只需调整相邻节点的引用,时间复杂度为 O(1)。
  • 顺序访问效率低:由于基于链表,LinkedList 不支持随机访问,需要从头或尾开始遍历,时间复杂度为 O(n)。
  • 适合频繁插入和删除:对于频繁插入和删除元素的场景,LinkedList 性能更好。

总结

  • 如果需要频繁进行随机访问操作,应选择 ArrayList。
  • 如果需要频繁进行插入和删除操作而访问操作较少,应选择 LinkedList。
  • ArrayList 适合随机访问,LinkedList 适合插入和删除操作。

特殊情况:

头插法插入数据:

  • ArrayList:使用头插法插入数据时,需要将已有元素依次向后移动,因为 ArrayList 在中间或开头插入元素的时间复杂度为 O(n),效率较低。

  • LinkedList:LinkedList 在头部插入元素时效率较高,只需要调整指针即可,时间复杂度为 O(1)。

  • LinkedList 在头部插入元素时效率更高,因此使用头插法插入数据时,应该选择 LinkedList。

尾插法插入数据:

  • ArrayList:使用尾插法插入数据时,由于 ArrayList 在末尾添加元素的时间复杂度为 O(1),效率较高。
  • LinkedList:LinkedList 在末尾插入元素时也需要调整指针,但时间复杂度也为 O(1)。
  • 对于尾插法插入数据,无论是 ArrayList 还是 LinkedList 都能够以较高的效率进行插入操作。

使用头插法插入数据时应选择 LinkedList,而使用尾插法插入数据时,ArrayList 和 LinkedList 都可以达到较高的效率。

Powered by Hexo & Theme Keep
Unique Visitor Page View