Java的Deque分析
阿新 • • 發佈:2020-08-03
1.概述
Java中實際上提供了java.util.Stack
來實現棧結構,但官方目前已不推薦使用,而是使用java.util.Deque
雙端佇列來實現佇列與棧的各種需求.如下圖所示java.util.Deque
的實現子類有java.util.LinkedList
和java.util.ArrayDeque
.顧名思義前者是基於連結串列,後者基於資料實現的雙端佇列.
2.功能對比
要講棧和佇列,首先要講Deque介面。Deque的含義是“double ended queue”,即雙端佇列,它既可以當作棧使用,也可以當作佇列使用。
第一個元素 (頭部) |
最後一個元素 (尾部) | |||
丟擲異常 | 特殊值 | 丟擲異常 | 特殊值 | |
插入 | addFirst(e) | offerFirst(e) | addLast(e) | offerLast(e) |
刪除 | removeFirst() | pollFirst() | removeLast() | pollLast() |
檢查 | getFirst() | peekFirst() | getLast() | peekLast() |
下表列出了Deque與Queue相對應的介面:
下表列出了Deque與Stack對應的介面:
上面兩個表共定義了Deque的12個介面。新增,刪除,取值都有兩套介面,它們功能相同,區別是對失敗情況的處理不同。一套介面遇到失敗就會丟擲異常,另一套遇到失敗會返回特殊值(false或null)。除非某種實現對容量有限制,大多數情況下,新增操作是不會失敗的。雖然Deque的介面有12個之多,但無非就是對容器的兩端進行操作,或新增,或刪除,或檢視。明白了這一點講解起來就會非常簡單。
3.使用