为什么要在堆栈上使用Deque?

Stack我的用例需要一个数据结构。我应该能够将项目推送到数据结构中,而我只想从堆栈中检索最后一个项目。该堆栈的JavaDoc说:

Deque接口及其实现提供了一组更完整和一致的LIFO堆栈操作,应优先使用此类。例如:

Deque<Integer> stack = new ArrayDeque<>();

我绝对不希望这里出现同步行为,因为我将使用方法本地的数据结构。除了这个,我为什么还要DequeStack这里呢?

PS:Deque的Javadoc说:

双端队列也可以用作LIFO(后进先出)堆栈。此接口应优先于旧版Stack类使用。

回答:

一方面,在继承方面更明智。在我看来,Stack扩展的事实Vector真的很奇怪。在Java的早期,继承被IMO过度使用-这Properties是另一个例子。

对我而言,您引用的文档中的关键词是 一致的

Deque公开了一组操作,这些操作都与从集合的开头或结尾获取,添加/删除项,进行迭代等有关-仅此而已。故意没有办法按位置访问元素,这 是因为

它是的子类而Stack暴露出来。 __Vector

哦,而且也Stack没有接口,因此,如果您知道需要Stack操作,您最终将提交到特定的具体类,这通常不是一个好主意。

也如注释中指出的那样,StackDeque具有反向迭代顺序:

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()也对此进行了说明:

以适当的顺序返回此双端队列中的元素的迭代器。元素将按照从头(头)到后(尾)的顺序返回。

以上是 为什么要在堆栈上使用Deque? 的全部内容, 来源链接: utcz.com/qa/422459.html

回到顶部