我的用例需要一个 Stack
数据结构。我应该能够将项目推送到数据结构中,我只想从堆栈中检索最后一个项目。 Stack 的 JavaDoc 说:
Deque 接口及其实现提供了一组更完整和一致的 LIFO 堆栈操作,应优先使用此类。例如:
Deque<Integer> stack = new ArrayDeque<>();
我绝对不希望此处出现同步行为,因为我将使用方法的本地数据结构。除此之外,为什么我更喜欢 Deque
而不是 Stack
在这里?
PS:来自 Deque 的 javadoc 说:
双端队列也可以用作 LIFO(后进先出)堆栈。应优先使用此接口而不是遗留 Stack 类。
原文由 Geek 发布,翻译遵循 CC BY-SA 4.0 许可协议
一方面,它在继承方面更明智。
Stack
extendsVector
的事实在我看来真的很奇怪。在 Java 的早期,继承被过度使用 IMO -Properties
是另一个例子。对我来说,您引用的文档中的关键词是 consistent 。
Deque
公开了一组操作,这些操作都是关于能够从集合的开头或结尾获取/添加/删除项目,迭代等 - 仅此而已。故意没有办法按位置访问元素,它Stack
公开 ,因为 它是Vector
的子类。哦,还有
Stack
没有接口,所以如果你知道你需要Stack
操作,你最终会提交给一个特定的具体类,这通常不是一个好主意。同样正如评论中指出的那样,
Stack
和Deque
具有反向迭代顺序:Deque.iterator() 的 JavaDocs 中也对此进行了解释: