Java 为什么要使用Deque而不是内置堆栈<>;?

Java 为什么要使用Deque而不是内置堆栈<>;?,java,collections,stack,deprecated,obsolete,Java,Collections,Stack,Deprecated,Obsolete,声明说堆栈最好是从Deque创建,而不是使用典型的堆栈。不幸的是,它没有强调为什么会这样 Deques还可以用作后进先出(后进先出)堆栈。此接口应优先于遗留堆栈类使用。当deque用作堆栈时,从deque的开头推送和弹出元素 有人能指出原因吗?类似地,我们是否应该避免使用内置的集合对象?我是一个C++ java开发人员,所以任何这样的微妙指针都会有帮助。 谢谢。Java泛型是在集合的初始实现之后添加的;源于Java1.0,当他们添加泛型时,并没有破坏现有代码,而是决定添加复制功能的类(但提供一致

声明说
堆栈
最好是从
Deque
创建,而不是使用典型的
堆栈
。不幸的是,它没有强调为什么会这样

Deques还可以用作后进先出(后进先出)堆栈。此接口应优先于遗留堆栈类使用。当deque用作堆栈时,从deque的开头推送和弹出元素

有人能指出原因吗?类似地,我们是否应该避免使用内置的
集合
对象?我是一个C++ java开发人员,所以任何这样的微妙指针都会有帮助。
谢谢。

Java泛型是在集合的初始实现之后添加的;源于Java1.0,当他们添加泛型时,并没有破坏现有代码,而是决定添加复制功能的类(但提供一致的API)。这就是为什么您应该更喜欢a—它提供了一个与所有其他Java
集合一致的API。

堆栈
扩展
向量
,这意味着它对每个单独的操作进行
同步


很可能会有一个线程访问数据结构,因此每次操作上的同步都是浪费CPU时间。您将花费所有时间抓取和释放对象上的锁,而实际上很少有时间添加或删除项。

Stack extends Vector。看看这个答案:@PatrickParker,我不认为这个问题回答了我的疑问。好了,公认的答案只是说“对于堆栈等价物,我先看看Deque/ArrayDeque。”你认为把它归类为dup就足够了吗?好的。如果你仔细阅读,你会注意到堆栈是向量的扩展。换句话说,他们所说的关于向量的每一句话都适用于堆栈。@P.K.你应该阅读关于这个问题的所有答案。同时阅读这个更深入地讨论堆栈的答案;错,
Stack
也支持Java泛型。所以,我要明确一点,你的意思是实现一个
Deque
接口而不是
Stack
?@PatrickParker我的措辞可能有些尴尬。直到Java(1.)2才添加集合,泛型是Java5,Deque是Java6中添加的。但是
Stack
早于这一切!泛型和原因无关,因为堆栈支持泛型。究其原因,更多的是因为堆栈和向量一样,由于其同步工作方式的不同而存在固有的缺陷。他们无法修复这一问题,因为依赖于同步逻辑的类将被破坏。