Java 雙端佇列介面 Deque
阿新 • • 發佈:2020-12-14
Deque 是一種支援在兩端進行操作的線性結構,包含了棧和佇列的功能。Java 中建議使用 Dqueue 的實現來替代遺留的 Stack 類。本文將介紹 Deque 提供的主要 API。
雙端操作 API
Deque 的核心 API 可以按照操作頭部和尾部分為兩類,並可以進一步按照丟擲異常和返回特殊值進行進一步劃分。
頭部操作 | 尾部操作 | |||
丟擲異常 | 返回特殊值 | 丟擲異常 | 返回特殊值 | |
插入 | 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。這兩個典型代表的詳細介紹參考下面兩篇部落格: