一方面,在继承方面更明智。在我看来,Stack
扩展的事实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
JavaDocs for Deque.iterator()也对此进行了说明:
以适当的顺序返回此双端队列中的元素的迭代器。元素将按照从头(头)到后(尾)的顺序返回。