LinkedList的内部实现原理是怎样的?

2026-10-09 13:030阅读0评论服务器VPS
  • 内容介绍
  • 文章标签
  • 相关推荐

初见 LinkedList:不只是“链表”那么简洁

说实话, 刚入行那会儿,面试官问“ArrayList 和 LinkedList 差别”,我背得滚瓜烂熟:“数组 vs 链表,查迅速 vs 增删迅速”。当时觉得拿捏了 直到后来在生产周边环境里踩了坑——在百万级数据量的随机读场景下坚硬上 LinkedList,直接把 GC 拖垮了。那次事故逼着我把 JDK 源码啃了个透,才发觉这玩意儿远比教科书上繁杂,冲鸭!。

骨架:Node 节点与双向链表的“灵魂”

打开源码, 映入眼帘的不是哪些较高较深算法,而是一个静态内部类 Node。 盘它。 别较小看这几行代码, 它是整个 LinkedList 的基因密码:

JDK源码解析: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 手动遍历链表沉重建引用关系。

阅读全文

初见 LinkedList:不只是“链表”那么简洁

说实话, 刚入行那会儿,面试官问“ArrayList 和 LinkedList 差别”,我背得滚瓜烂熟:“数组 vs 链表,查迅速 vs 增删迅速”。当时觉得拿捏了 直到后来在生产周边环境里踩了坑——在百万级数据量的随机读场景下坚硬上 LinkedList,直接把 GC 拖垮了。那次事故逼着我把 JDK 源码啃了个透,才发觉这玩意儿远比教科书上繁杂,冲鸭!。

骨架:Node 节点与双向链表的“灵魂”

打开源码, 映入眼帘的不是哪些较高较深算法,而是一个静态内部类 Node。 盘它。 别较小看这几行代码, 它是整个 LinkedList 的基因密码:

JDK源码解析: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 手动遍历链表沉重建引用关系。

阅读全文