当前位置: 首页 > 面试题库 >

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

刘博文
2023-03-14
问题内容

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

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



 类似资料:
  • 我需要一个数据结构用于我的用例。我应该能够将项目推入数据结构,并且我只想从堆栈中检索最后一个项目。JavaDoc for Stack表示:

  • 问题内容: 我是Hadoop / ZooKeeper的新手。我不明白将ZooKeeper与Hadoop结合使用的目的,ZooKeeper是否在Hadoop中写入数据?如果不是,那么为什么我们将ZooKeeper与Hadoop一起使用? 问题答案: Hadoop 1.x不使用Zookeeper。即使在Hadoop 1.x安装中,HBase也会使用zookeeper。 Hadoop从2.0版开始也采用

  • 问题内容: 我在网上研究过immutablejs的好处,但是没有发现任何令人满意的东西! 我的问题是,当我可以冻结一个普通的旧javascript对象时,为什么我应该使用该库并使用非本机数据结构? 问题答案: 我认为您不了解immutablejs提供的功能。这不是一个使您的对象变得不可变的库,而是一个使用不可变值的库。 在不简单重复他们的文档和任务说明的情况下,我将说明它提供的两件事: 类型。他们

  • 我有一个堆栈的ArrayList,我在其中一个堆栈中添加了一个元素,并在列表中循环打印每个堆栈的索引 然后我从上一个堆栈中删除元素,将其添加到下一个堆栈中,打印每个堆栈的索引,并对ArrayList中的所有堆栈继续此操作 然而,当任何堆栈为空时,在获取ArrayList中每个堆栈的索引时会出现非常不寻常的行为。非空的堆栈将具有正确的索引值,而空的堆栈将具有错误的索引值 此外,如果包含元素的堆栈的索

  • 问题内容: 为什么要在上使用pip?难道不是PyPI和程序包作者最主要的原因吗?如果作者将废话源tarball(例如:丢失的文件,没有)上传到PyPI,则pip和都会失败。除了外观上的差异外,为什么Python的人(如上述推文中)似乎强烈青睐pip而不是? (假设我们正在谈论由社区维护的Distribute软件包中的) 问题答案: 这里的许多答案在2015年已经过时了(尽管丹尼尔·罗斯曼最初接受的

  • 问题内容: 我一定会丢失一些东西,但是我已经看了几天了,但是到底为什么您会使用log4j2而不是log4j(而不是性能)? 从目前为止我所看到的,log4j2被宣传为更易于配置,但实际上却要复杂得多(现在已经三天了,我仍然无法在我的主目录中写日志)。自动配置对我根本不起作用(或者至少我无法使其工作),配置文件本身的结构实质上更复杂,在运行时添加东西以帮助诊断似乎更加困难。 因此,除了性能之外,还有