Java 中的 LinkedList

LinkedList 在开发中并不常用,在大多数场景下,我们会采用 ArrayList。本篇将从多个维度解读 LinkedList 与 ArrayList 存在的差异。

底层结构

LinkedList 与 ArrayList 底层结构不同:ArrayList 基于数组,而 LinkedList 基于双向链表。

LinkedList底层结构

不同的底层机构导致二者其他方面也有很大差异。

随机访问

ArrayList 基于下标索引查找元素,随机访问元素非常快。

LinkedList 查找元素需要沿着链表头结点遍历,随机查找元素较慢。

增加元素

ArrayList 在尾部添加元素,直接追加到数组中最后一个没有元素的位置即可,但是要在中间添加元素,需要移动元素位置,会有性能消耗。此外,数组存在扩容情况,当数组容量已满时,需要一次元素扩容,会有资源消耗。

LinkedList 在头尾插入元素只需要在链表中添加元素、维护指针即可,一般来说比ArrayList 快,但是要在中间插入元素,需要遍历找到需要插入元素的位置,性能消耗巨大,完全没法和 ArrayList 比。

LinkedList 与 ArrayList 总结

下面总结一下 LinkedList 与 ArrayList 的差异。

ArrayList LinkedList
底层结构 基于数组,需要连续内存空间 基于双向链表,无需连续内存
检索元素性能 随机访问快 随机访问慢
插入元素性能 尾部插入元素较快,中间插入元素慢,且可能涉及扩容,性能低 头尾插入元素快,中间插入元素非常慢
内存消耗 连续存储,可以利用 CPU 缓存,消耗低 不连续,不能充分利用 CPU 缓存,消耗高
转载请注明出处:码谱记录 » Java 中的 LinkedList
标签: