LinkedList的内部实现原理是怎样的?
- 内容介绍
- 文章标签
- 相关推荐
初见 LinkedList:不只是“链表”那么简洁
说实话, 刚入行那会儿,面试官问“ArrayList 和 LinkedList 差别”,我背得滚瓜烂熟:“数组 vs 链表,查迅速 vs 增删迅速”。当时觉得拿捏了 直到后来在生产周边环境里踩了坑——在百万级数据量的随机读场景下坚硬上 LinkedList,直接把 GC 拖垮了。那次事故逼着我把 JDK 源码啃了个透,才发觉这玩意儿远比教科书上繁杂,冲鸭!。
骨架:Node 节点与双向链表的“灵魂”
打开源码, 映入眼帘的不是哪些较高较深算法,而是一个静态内部类 Node。 盘它。 别较小看这几行代码, 它是整个 LinkedList 的基因密码:

private static class Node {
E item;
Node next;
Node prev;
Node {
this.item = element;
this.next = next;
this.prev = prev;
}
}
item 装数据,next 指后继,prev 指前驱。标准的双向链表节点。但有个细节常被忽略:transient 关键字修饰着 firstlast 和 size。这意味着哪些?序列化时JVM 不会默认持久化这一些指针!LinkedList 沉重写了 writeObject/readObject 手动遍历链表沉重建引用关系。当时调试 Hessian 序列化报错时 就是卡在这儿半天才悟过来——如果不明白 transient 配合自定义序列化的意图,分布式周边环境下对象传输绝对是雷区。
注意!LinkedList 没有哨兵节点,总体来看...!
初见 LinkedList:不只是“链表”那么简洁
说实话, 刚入行那会儿,面试官问“ArrayList 和 LinkedList 差别”,我背得滚瓜烂熟:“数组 vs 链表,查迅速 vs 增删迅速”。当时觉得拿捏了 直到后来在生产周边环境里踩了坑——在百万级数据量的随机读场景下坚硬上 LinkedList,直接把 GC 拖垮了。那次事故逼着我把 JDK 源码啃了个透,才发觉这玩意儿远比教科书上繁杂,冲鸭!。
骨架:Node 节点与双向链表的“灵魂”
打开源码, 映入眼帘的不是哪些较高较深算法,而是一个静态内部类 Node。 盘它。 别较小看这几行代码, 它是整个 LinkedList 的基因密码:

private static class Node {
E item;
Node next;
Node prev;
Node {
this.item = element;
this.next = next;
this.prev = prev;
}
}
item 装数据,next 指后继,prev 指前驱。标准的双向链表节点。但有个细节常被忽略:transient 关键字修饰着 firstlast 和 size。这意味着哪些?序列化时JVM 不会默认持久化这一些指针!LinkedList 沉重写了 writeObject/readObject 手动遍历链表沉重建引用关系。当时调试 Hessian 序列化报错时 就是卡在这儿半天才悟过来——如果不明白 transient 配合自定义序列化的意图,分布式周边环境下对象传输绝对是雷区。
注意!LinkedList 没有哨兵节点,总体来看...!

