首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 集合深度剖析:LinkedList 作為雙端隊列、棧與隊列的完整操作指南

     編輯:Java 相關知識

LinkedList 不僅是 List 接口的鏈表實現,更完整實現了 Deque<E>(雙端隊列)、Queue<E>(隊列)接口,提供了豐富的首尾操作方法,可直接作為棧(LIFO)、隊列(FIFO)、雙端隊列使用。本文通過完整代碼示例,系統梳理其特有 API 的行為差異與適用場景。

核心特性速覽

  • 底層:雙向鏈表,非線程安全,允許 null 元素
  • 實現接口:Serializable, Cloneable, Iterable<E>, Collection<E>, Deque<E>, List<E>, Queue<E>
  • 隨機訪問 O(n),首尾增刪 O(1),適合頻繁頭尾操作場景

首尾元素訪問:獲取 vs 彈出

操作意圖方法空集合行為備註
獲取首元素(保留)getFirst()、element()、peek()、peekFirst()前兩者拋 NoSuchElementException,後兩者返回 nullpeek 系為 Queue/Deque 接口規範
獲取尾元素(保留)getLast()、peekLast()前者拋異常,後者返回 null
彈出首元素(移除)removeFirst()、poll()、pollFirst()、pop()removeFirst 拋異常,poll 系返回 nullpop() 為棧語義,內部調用 removeFirst()
彈出尾元素(移除)removeLast()、pollLast()前者拋異常,後者返回 null

添加元素:入隊 vs 入棧

逆序遍歷:descendingIterator()

Iterator<String> it = list.descendingIterator();
while (it.hasNext()) {
    System.out.print(it.next() + ",");
}
// 輸出:3333,2222,1111,head,

無需手動反轉,高效支持從尾到頭遍歷。

特定元素移除:首次 vs 末次出現

removeFirstOccurrence("3333"); // 移除首個匹配,返回 boolean
removeLastOccurrence("2222");  // 移除最後匹配,返回 boolean

內部委託 remove(Object) 實現,按方向查找首個匹配節點斷鏈。

實戰場景選型建議

  • 棧(LIFO):push(E) / pop() / peek(),語義清晰
  • 隊列(FIFO):offer(E) / poll() / peek(),符合 Queue 規範
  • 雙端隊列:offerFirst/pollFirst、offerLast/pollLast 成對使用
  • 高併發環境:改用 ConcurrentLinkedDeque 或 ArrayBlockingQueue
  • 隨機訪問頻繁:優先選 ArrayList

完整運行示例輸出

[1111, 2222, 3333]
[head, 1111, 2222, 3333]
3333,2222,1111,head,
head
head
head
head
3333
3333
[head, 1111, 2222, 3333, tail]
[----, head, 1111, 2222, 3333, tail]
[----, head, 1111, 2222, 3333, tail, ====]
----
head
====
[xyz, 1111, 2222, 3333, tail]
xyz
[1111, 2222, 3333, tail]
1111
[2222, 3333, tail]
true
[2222, tail]
tail
[2222]
true
[]

掌握 LinkedList 全套首尾操作語義,能讓你在棧、隊列、雙端隊列等經典數據結構場景下游刃有餘,寫出更具表達力的代碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
位置方法異常行為備註
尾部(隊列入隊)add()、addLast()、offer()、offerLast()add 系拋異常(理論不會),offer 系返回 booleanoffer 為 Queue 接口規範
首部(棧壓入/雙端隊列)addFirst()、offerFirst()、push()同理push() 為棧語義,內部調用 addFirst()