LinkedList 是 Java 集合框架中基於雙向鏈表實現的 List 接口實現類,同時實現了 Deque 接口,因此天然支持棧(LIFO)和隊列(FIFO)操作。本文將從類結構、常用 API、底層源碼、棧隊列實現四個維度全面解析。
AbstractSequentialList,實現 List、Deque、Cloneable、Serializable。LinkedList() 創建空鏈表;LinkedList(Collection<? extends E> c) 包含指定集合元素的鏈表。Node<E> 定義雙向鏈表節點:item、next、prev。LinkedList<String> sList = new LinkedList<>();
sList.add("zhangsan"); // 尾部添加
sList.add("lisi");
sList.add("wangwu");
sList.addFirst("jay"); // 頭部插入
sList.addLast("jhon"); // 尾部添加(同 add)
// 遍歷輸出
for (String name : sList) {
System.out.println(name);
}
// 棧操作:先進後出
System.out.println(sList.removeFirst()); // 移除並返回首元素
sList.clear();
// 隊列操作:先進先出
System.out.println(sList.pollFirst()); // 獲取並移除首元素,空返回 null
remove(Object o) 遍歷鏈表查找目標節點,調用 unlink(Node<E> x) 斷開引用:
E unlink(Node<E> x) {
final E element = x.item;
final Node<E> next = x.next;
final Node<E> prev = x.prev;
if (prev == null) first = next; // 刪除頭節點
else { prev.next = next; x.prev = null; }
if (next == null) last = prev; // 刪除尾節點
else { next.prev = prev; x.next = null; }
x.item = null; // 幫助 GC
size--; modCount++;
return element;
}
圖解:刪除節點 b,將前驅 a 的 next 指向後繼 c,c 的 prev 指向 a,b 斷開引用置 null。

| 數據結構 | 對應方法 | 語義 |
|---|---|---|
| 棧 (LIFO) | push() / pop() / peek() | 等同於 addFirst/removeFirst/getFirst |
| 隊列 (FIFO) | offer() / poll() / peek() | 等同於 addLast/removeFirst/getFirst |
因實現 Deque,LinkedList 可直接作為高性能棧/隊列使用,無需同步開銷(非線程安全)。
LinkedList 以雙向鏈表為底層,隨機訪問 O(n),但頭尾增刪 O(1),適合頻繁插入刪除、棧隊列場景。理解 unlink 斷開引用機制有助於排查內存洩漏與併發修改異常。