1. 程式人生 > 實用技巧 >Java 雙端佇列介面 Deque

Java 雙端佇列介面 Deque

Deque 是一種支援在兩端進行操作的線性結構,包含了棧和佇列的功能。Java 中建議使用 Dqueue 的實現來替代遺留的 Stack 類。本文將介紹 Deque 提供的主要 API。

雙端操作 API

Deque 的核心 API 可以按照操作頭部和尾部分為兩類,並可以進一步按照丟擲異常和返回特殊值進行進一步劃分。

Deque 方法彙總
頭部操作 尾部操作
丟擲異常 返回特殊值 丟擲異常 返回特殊值
插入 addFirst(e) offerFirst(e) addLast(e)
offerLast(e)
刪除 removeFirst() pollFirst() removeLast() pollLast()
獲取 getFirst() peekFirst() getLast() peekLast()

需要注意的是,某些 Deque 的實現(如 ArrayDeque)在呼叫 offerFirst(e), offerLast(e) 時,若傳入的 e 為 null,仍然會丟擲 NullPointerEaception,而另一些實現則不會(如 LinkedList)。

descendingIterator()

返回一個迭代器,迭代器從尾部往頭部方向返回元素。

removeFirstOccurrence(Object o) / removeLastOccurrence(Object o)

移除首次/最後出現的元素 o,Deque 中可以放入重複元素,首次出現的意思是距離頭部最近的與 o 相等的元素,同理,最後出現的意思是距離尾部最近的與 o 相等的元素。

佇列

Deque 繼承了 Queue 介面,因此也提供了佇列相關操作的東西。進行佇列的操作本質是雙端佇列的 API 換了個名字,只需要將名字對應起來即可。

Queue 方法 對應的 Deque 方法
add(e)
addLast(e)
offer(e) offerLast(e)
remove() removeFirst()
poll() pollFirst()
element() getFirst()
peek() peekFirst()

與佇列類似,棧的 API 也時部分雙端佇列 API 換了了名字。

Stack 方法 對應的 Deque 方法
push(e) addFirst(e)
pop() removeFirst()
peek() peekFirst()

Deque 的實現

Deque 是線性結構,實現方式分類兩類,一類基於陣列,典型代表是 ArrayDeque;另一類基於連結串列,典型代表是 LinkedList。這兩個典型代表的詳細介紹參考下面兩篇部落格:

ArrayDeque API 與演算法分析
LinkedList 分析