繁体   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