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 插入,删除都是移动指针效率很高。
- 查找需要进行遍历查询,效率较低。