为什么要使用 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 时间。您将花费所有时间来获取和释放对象上的锁,而实际添加或删除项目的时间很少。
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 时间。您将花费所有时间来获取和释放对象上的锁,而实际添加或删除项目的时间很少。