簡體   English   中英

從Collections.asLifoQueue(Deque)返回的隊列與堆棧(Java 6)之間的區別

[英]Difference between Queue returned from Collections.asLifoQueue(Deque) and a Stack (Java 6)

作為Java 6的一部分,在Collections實用程序類中添加了一個asLifoQueue(Deque)靜態方法。

Javadoc說

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

返回一個雙端隊列的視圖作為后進先出(Lifo)隊列。 方法add映射為push,remove映射為pop等。 當您想使用需要Queue但需要Lifo排序的方法時,此視圖很有用。

此方法返回的隊列上的每個方法調用都會在后備雙端隊列上恰好產生一個方法調用,但有一個例外。 addAll方法作為對后備雙端隊列的addFirst調用序列實現。

現在,這和堆棧有什么區別。 這本質上不是堆棧嗎?

堆棧是lifo集合,但(i)它已過時(javadoc建議使用Deque),並且(ii)它不實現Queue接口。

當您想使用需要Queue但需要Lifo排序的方法時,此視圖很有用。

該方法只包裝了雙端隊列參數,因此您可以使用Queue實現。 如您所說,隊列只是一個堆棧,但是Stack類的javadoc說:

Deque接口及其實現提供了一組更完整和一致的LIFO堆棧操作,應優先使用此類。 例如:

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

DequeStack更完整, asLifoQueue方法只是將雙端隊列轉換為類似堆棧的數據結構的實用程序。

從Javadoc:

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

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

所以這是相同的行為,但是Deque有更多方法可以使用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM