2014-01-17 41 views
2

作爲Java 6的一部分,在Collections實用程序類中添加了asLifoQueue(Deque)靜態方法。從Collections.asLifoQueue(Deque)和堆棧(Java 6)返回的隊列之間的區別

的Javadoc說

public static <T> Queue<T> asLifoQueue(Deque<T> deque) 

返回一個雙端隊列的視圖,作爲後進先出(LIFO)排隊。 方法add被映射到push,remove被映射到pop等等。如果您想使用需要 隊列但需要Lifo排序的方法,則此視圖可能很有用。

由此方法 返回的隊列上的每個方法調用都會導致支持雙向隊列中只有一個方法調用,但 只有一個例外。 addAll方法作爲支持deque的一系列 addFirst調用來實現。

這和堆棧有什麼區別。這不是一個堆棧嗎?

回答

0

當您想要使用需要隊列但需要Lifo排序的方法時,此視圖非常有用。

該方法只是包裝deque參數,因此您可以使用Queue實現。正如你所說,排隊僅僅是一個堆棧,但Stack類的javadoc說:

更完整和一致的LIFO堆棧操作的集合由雙端隊列接口和它的實現,應該使用提供而不是這個班級。例如:

Deque<Integer> stack = new ArrayDeque<Integer>(); 

Deque剛好比Stack更完整的,並且該方法asLifoQueue只是一個雙端隊列轉換爲堆棧狀數據結構的實用程序。

0

Stack是一個lifo集合,但是(i)它已經過時(javadoc建議使用Deque)並且(ii)它沒有實現Queue接口。

0

來自Javadoc:

當第一次創建堆棧時,它不包含任何項目。

Deque接口及其實現應提供更完整和一致的LIFO堆棧操作集,而這些操作應優先於此類使用。

所以這是一樣的行爲,但德克有更多的方法玩