這也許是一種Java瑣事問題。用Java Collections取代傳統堆棧?
我多次使用了Stack實現。
我已經讀過,這被認爲是遺留類,並且由於它的子類Vector
在單線程應用程序中使其性能很差。
我的問題是,Java集合類中最好的選擇是什麼?
是否有另一個Stack
類可用(可能是一個不同的名稱),這是可供選擇的類?
我的意思是,確定在另一個現有的數據結構上實現一個堆棧很容易,但我希望有一個現有的Stack
可以使用。
這也許是一種Java瑣事問題。用Java Collections取代傳統堆棧?
我多次使用了Stack實現。
我已經讀過,這被認爲是遺留類,並且由於它的子類Vector
在單線程應用程序中使其性能很差。
我的問題是,Java集合類中最好的選擇是什麼?
是否有另一個Stack
類可用(可能是一個不同的名稱),這是可供選擇的類?
我的意思是,確定在另一個現有的數據結構上實現一個堆棧很容易,但我希望有一個現有的Stack
可以使用。
如果你讀了更多當前的Javadoc(1.6或1.7爲例),而不是舊的1.4.2文檔,你會發現:
提供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
從堆棧的Javadoc:
的更完整和一致的組LIFO堆棧操作的是 由雙端隊列接口和其實施方式中,這應該在 優先使用此類提供。
Deque stack = new ArrayDeque();
LinkedList implements push
and pop
methods。另請參閱其他Deque實現。
Commons Collections實現ArrayStack類。
您可以使用LinkedList
實現Deque
接口,並允許推送和彈出。
在Java7,你可以使用
http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#asLifoQueue(java.util.Deque)
得到一個堆棧狀物體。 add()的工作方式與push()和remove()的工作方式類似於pop()等。我在問這個問題後很久就回答了,因爲這似乎是新的「正確」答案。
+1。我認爲德克是一個隊列 – Cratylus
@ user384706它是。 –
好吧。它恰好比'Stack'快 –