我将如何在 Java 中迭代堆栈 [关闭]

Posted

技术标签:

【中文标题】我将如何在 Java 中迭代堆栈 [关闭]【英文标题】:How would I iterate a stack in Java [closed] 【发布时间】:2012-10-09 01:22:15 【问题描述】:

我想知道如何在 Stack 类中使用迭代器。如何为它创建一个迭代器类?

【问题讨论】:

公共迭代器 iterator() 【参考方案1】:

只需通过iterator() 获取Iterator

Stack<YourObject> stack = ...

Iterator<YourObject> iter = stack.iterator();

while (iter.hasNext())
    System.out.println(iter.next());

或者,如果您只想打印它们,请使用enhanced-for loop:

for(YourObject obj : stack)

    System.out.println(obj);

【讨论】:

没有迭代器 - while (!stack.isEmpty()) ... currentSymbol = stack.pop();... @HiteshSahu 运行代码后,Stack 将为空,因为pop() 删除了堆栈的顶部。 同意。我正在构建一个编译器,我正在使用这个变体进行语法解析。 栈迭代器有一个bug,这种方法不返回LIFO顺序。 ***.com/questions/16992758/…【参考方案2】:
Stack<Object> myStack; // obtain your Stack object

Iterator iterator = myStack.iterator();
while (iterator.hasNext()) 
   Object object = iterator.next();

【讨论】:

也请写一些解释,这段代码是做什么的。【参考方案3】:

你可以这样做:

for (Iterator<MyObject> iterator = stack.iterator(); iterator.hasNext();) 
   MyObject myObject = iterator.next();
   myObject.doStuff();

【讨论】:

【参考方案4】:

听起来您实现了一个自定义堆栈类。您的“某物”应实现Iterable 接口并提供Iterator 的实现。

public class MySomethingThatIsAStack<T> implements Iterable<T> 

   @Override
   public Iterator<T> iterator() 
     return new Iterator<T>() 
         // your implementation of the iterator, namely the
         // methods hasNext, next and remove
     
   

【讨论】:

【参考方案5】:

I am working on something that is implementing a stack using queues

这是否意味着您没有使用 Java Stack 实现? http://docs.oracle.com/javase/6/docs/api/java/util/Stack.html 它基于向量而不是队列。

如果您使用的是 Java Stack 实现,则可以像其他答案一样使用迭代器。 否则,如果这是自定义的Stack,则必须实现Iterable 接口。然后你可以做一些类似其他答案的事情。

【讨论】:

以上是关于我将如何在 Java 中迭代堆栈 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

[如何在C ++中仅使用迭代器来正确地迭代3D向量? [关闭]

堆栈溢出格式如何工作? [关闭]

如何增加堆栈的容量? [关闭]

如何在不使用 max() 或对其进行迭代的情况下找到堆栈中的最大整数值?

如何在 C++ 中使用堆栈 [关闭]

如何只关闭堆栈中的最后一个控制器而不一个一个地关闭