一方面,它在继承方面更明智。Stack
在我看来, extends的事实Vector
真的很奇怪。在 Java 早期,IMO 过度使用了继承——Properties
这是另一个例子。
对我来说,您引用的文档中的关键词是一致的。Deque
公开了一组操作,这些操作都是关于能够从集合的开头或结尾获取/添加/删除项目、迭代等 - 就是这样。故意无法按位置访问元素,Stack
因为它是Vector
.
哦,而且也Stack
没有接口,所以如果你知道你需要Stack
操作,你最终会提交到一个特定的具体类,这通常不是一个好主意。
也正如评论中指出的那样,Stack
并且Deque
具有反向迭代顺序:
Stack<Integer> stack = new Stack<>();
stack.push(1);
stack.push(2);
stack.push(3);
System.out.println(new ArrayList<>(stack)); // prints 1, 2, 3
Deque<Integer> deque = new ArrayDeque<>();
deque.push(1);
deque.push(2);
deque.push(3);
System.out.println(new ArrayList<>(deque)); // prints 3, 2, 1
这也在Deque.iterator()的 JavaDocs 中进行了解释:
以正确的顺序返回此双端队列中元素的迭代器。元素将按从第一个(头)到最后一个(尾)的顺序返回。