我需要一个Stack
我的用例的数据结构。我应该能够将项目推送到数据结构中,并且我只想从堆栈中检索最后一个项目。这堆栈的 JavaDoc says :
一组更完整且一致的 LIFO 堆栈操作是
由 Deque 接口及其实现提供,应该
优先使用此类。例如:
Deque<Integer> stack = new ArrayDeque<>();
我绝对不希望这里有同步行为,因为我将使用方法本地的数据结构。除此之外为什么我应该更喜欢Deque
over Stack
here ?
P.S:来自 Deque 的 javadoc 说:
双端队列也可以用作 LIFO(后进先出)堆栈。这
应优先使用接口而不是遗留 Stack 类。
一方面,从继承的角度来说,它更加明智。事实是Stack
延伸Vector
在我看来,这确实很奇怪。在 Java 早期,继承在 IMO 中被过度使用 -Properties
这是另一个例子。
对我来说,您引用的文档中的关键词是持续的. Deque
公开了一组操作,这些操作都是关于能够从集合的开头或结尾获取/添加/删除项目、迭代等 - 就是这样。故意没有办法按位置访问元素,这Stack
暴露because它是一个子类Vector
.
哦,还有Stack
没有界面,所以如果你知道你需要Stack
您最终将操作提交给特定的具体类,这通常不是一个好主意。
也正如评论中指出的那样,Stack
and 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 中也对此进行了解释双端队列迭代器():
按正确顺序返回此双端队列中元素的迭代器。元素将按从第一个(头)到最后一个(尾)的顺序返回。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)