LinkedList 在开发中并不常用,在大多数场景下,我们会采用 ArrayList。本篇将从多个维度解读 LinkedList 与 ArrayList 存在的差异。
底层结构
LinkedList 与 ArrayList 底层结构不同:ArrayList 基于数组,而 LinkedList 基于双向链表。
不同的底层机构导致二者其他方面也有很大差异。
随机访问
ArrayList 基于下标索引查找元素,随机访问元素非常快。
LinkedList 查找元素需要沿着链表头结点遍历,随机查找元素较慢。
增加元素
ArrayList 在尾部添加元素,直接追加到数组中最后一个没有元素的位置即可,但是要在中间添加元素,需要移动元素位置,会有性能消耗。此外,数组存在扩容情况,当数组容量已满时,需要一次元素扩容,会有资源消耗。
LinkedList 在头尾插入元素只需要在链表中添加元素、维护指针即可,一般来说比ArrayList 快,但是要在中间插入元素,需要遍历找到需要插入元素的位置,性能消耗巨大,完全没法和 ArrayList 比。
LinkedList 与 ArrayList 总结
下面总结一下 LinkedList 与 ArrayList 的差异。
– | ArrayList | LinkedList |
---|---|---|
底层结构 | 基于数组,需要连续内存空间 | 基于双向链表,无需连续内存 |
检索元素性能 | 随机访问快 | 随机访问慢 |
插入元素性能 | 尾部插入元素较快,中间插入元素慢,且可能涉及扩容,性能低 | 头尾插入元素快,中间插入元素非常慢 |
内存消耗 | 连续存储,可以利用 CPU 缓存,消耗低 | 不连续,不能充分利用 CPU 缓存,消耗高 |