LinkedList
底层是基于双向链表 Deque
实现的,也是实现了 List
接口,所以也拥有 List 的一些特点,出场率不高,了解一下。
1 | transient int size = 0; |
即类似如下形式:
first.prev == null && first.next == a
<——> a.prev = first&& a.next == last
<——> last.prev == a && last.next == null
add
每次插入都是移动指针,和 ArrayList
的拷贝数组相比效率提升不少。
1 | /** |
get
利用了双向链表的特性,使用空间来换取时间。如果索引值小于链表大小的一半,即 index
离链表头比较近,就从节点头部遍历,否则将从尾结点开始遍历。这就导致效率降低,特别是当 index
越接近 size
的中间值时。
1 | /** |
总结
- LinkedList 插入,删除都是移动指针效率很高。
- 查找需要进行遍历查询,效率较低。