簡體   English   中英

用Java Collections替換舊版Stack?

[英]Replace the legacy Stack with what from Java Collections?

這或許是一個Java瑣事問題。

我多次使用Stack實現。

我已經讀過這被認為是一個遺留類,並且由於它的子類Vector使其在單線程應用程序中的性能不佳。

我的問題是,Java Collection類中最好的選擇是什么?

是否有另一個可用的Stack類(可能是不同的名稱)?

我的意思是,可以很容易地實現另一個現有數據結構的堆棧,但我希望有一個現有的Stack可供使用。

如果您閱讀更新的Javadoc(例如1.6或1.7)而不是舊的1.4.2文檔,您會發現:

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

http://docs.oracle.com/javase/6/docs/api/java/util/Stack.html http://docs.oracle.com/javase/7/docs/api/java/util/Stack.html

在Java7中,您可以使用

http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#asLifoQueue(java.util.Deque)

獲得類似Stack的對象。 add()的工作方式類似於push(),remove()的工作方式類似於pop()等。我在問這個問題后很久就在這里回答,因為這似乎是新的“正確”答案。

LinkedList實現了pushpop方法。 另請參見其他Deque實現。

Commons Collections實現了一個ArrayStack類。

您可以使用Deque在同一端添加和刪除內容。

您可以使用LinkedList來實現Deque接口,並允許推送和彈出。

來自Stack javadoc:

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

Deque stack = new ArrayDeque ();

暫無
暫無

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

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