-2

我想知道如何在不使用任何额外内存的情况下迭代 aStack从顶部开始向下的元素。我相信默认iterator()是从下到上的。我还注意到Deque有一个descendingIterator. 对于堆栈,我无法找到与此类似的任何东西。我只是想知道是否可以这样做,没有什么特别的。如果这是不可能的,那么哪些其他 Java 数据结构提供了 a 的功能Stack并且能够向后迭代它(Dequeofc 除外)?

4

2 回答 2

2

Stack是 Java 1.2(和 Java 集合框架)之前的一个非常古老的类。如果可以的话,我建议您切换到 using Deque,正如您所说,它已经具备您需要的所有功能。

于 2013-11-14T15:30:09.203 回答
1

我想知道如何在不使用任何额外内存的情况下从顶部开始遍历 Stack 的元素并向下遍历。

从概念上讲,堆栈 不能被迭代,至少你弹出它的所有元素。时期。

这里的主要问题是您将此堆栈数据结构与 Java 混淆了,JavaStack为您提供了iterator来自其超类的 , Vector,这可能会让您感到困惑。实际上,这是来自 Java 1 的设计问题。Vector不鼓励使用类,如下所述:为什么 Java Vector 类被认为已过时或已弃用?,并且由于从Stack扩展vector,因此也不鼓励使用它。此外,在Stack该类的 JavaDoc 中,作者现在添加了以下信息(强调我的):

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


我还注意到,因为Deque有一个descendingIterator...

如评论中所述,该技术(在本例中为 Java)可以帮助您迭代数据结构这一事实是好的(或坏的,取决于您如何看待/使用它)。

请注意,这Deque是一个双端队列,可以作为堆栈和队列工作,具体取决于您希望/需要如何使用它。

由于Dequeextends from Iterable,它应该提供一个Iterator顺序,以便可以使用特定行为(如元素序列)访问其元素,此迭代器将从第一个到最后一个访问元素,就像在队列中导航一样。返回一个迭代器来从最后一个到第descendingIterator一个访问元素,就像在堆栈中导航一样。但同样,请考虑到这是技术带来的好处。

如果这是不可能的,那么哪些其他 Java 数据结构提供了 Stack 的功能,并且能够向后迭代它(Dequeofc 除外)?

除了它的并发子 ,BlockingDeque看起来不在常见的 Java 接口中。这是由这种设计驱动的:“编程到接口”是什么意思?. 请注意,您可以使用或其他结构从头开始创建堆栈ArrayList,或者使其行为像一个,但仍然取决于您。

于 2013-11-14T16:35:48.883 回答