LinkedList 源码剖析
2026/8/24小于 1 分钟
LinkedList 源码剖析
基于双向循环链表实现,增删快、查询慢,还可作为栈、队列、双端队列使用。
简介
- 基于双向循环链表实现
- 除了当作链表,还可当作栈、队列、双端队列使用(实现
Deque接口) - 非线程安全,仅适合单线程
- 实现
Serializable、Cloneable
关键成员
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable {
// 表头不包含任何数据,只保存前后节点的引用
private transient Entry<E> header = new Entry<E>(null, null, null);
private transient int size = 0;
public LinkedList() {
header.next = header.previous = header; // 空链表
}
}基本操作
public E getFirst() {
if (size == 0) throw new NoSuchElementException();
return header.next.element; // 表头下一个节点
}
public E getLast() {
if (size == 0) throw new NoSuchElementException();
return header.previous.element; // 表头前一个节点
}
public E removeFirst() {
return remove(header.next);
}由于是双向链表且表头 header 不包含数据,getFirst 返回 header.next,getLast 返回 header.previous。
特点
- 查询慢:需要从表头或表尾逐个遍历
- 增删快:只需修改前后节点的引用,无需移动元素
- 适合频繁插入、删除的场景(如队列操作)