为什么要使用 Deque 而不是内置 Stack<>?

Why to use a Deque instead of inbuilt Stack<>?

Java Doc 表示 Stack 最好从 Deque 创建,而不是使用典型的 Stack<>。可惜没有强调why so.

Deques can also be used as LIFO (Last-In-First-Out) stacks. This interface should be used in preference to the legacy Stack class. When a deque is used as a stack, elements are pushed and popped from the beginning of the deque.

有人能指出为什么吗?同样,在其他情况下我们应该避免使用内置的 Collections 对象吗?我是一名即将转向 Java 的 C++ 开发人员,因此任何此类微妙的指示都会有所帮助。

谢谢。

Java 泛型是在集合的初始实现之后添加的; Stack is from Java 1.0 - and rather then break existing code when they added generics, it was decided to add classes that duplicate functionality (but provide a consistent API). That is why you should prefer a Deque - 它提供与所有其他 Java Collection 一致的 API。

Stack extends Vector 这意味着它 synchronizes 用于每个单独的操作。

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