如何在Java中迭代一个栈

21

我想知道如何在堆栈类中使用迭代器。我该如何为其创建一个迭代器类?


public Iterator<Student> iterator() { } - Ervin Lucci
5个回答

25

只需通过 iterator() 获取 Iterator:

Stack<YourObject> stack = ...

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

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

或者,如果您只想打印它们所有,请使用增强for循环

for(YourObject obj : stack)
{
    System.out.println(obj);
}

没有迭代器 - while (!stack.isEmpty()) { ... currentSymbol = stack.pop();...} - Hitesh Sahu
3
运行您的代码后,由于pop()会移除栈顶元素,因此Stack将为空。 - Baz
同意。我正在构建一个编译器,使用这种变体进行语法分析。 - Hitesh Sahu
3
栈迭代器中存在一个错误,这种方法不能返回后进先出的顺序。 - user3170122

4
你可以这样做:
for (Iterator<MyObject> iterator = stack.iterator(); iterator.hasNext();) {
   MyObject myObject = iterator.next();
   myObject.doStuff();
}

1
Stack<Object> myStack; // obtain your Stack object

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

1
还请写一些解释,这段代码是做什么的。 - Lucifer

1
听起来你实现了一个自定义的堆栈类。你的“something”应该实现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
     }
   }
}

0

我正在做一个使用队列实现栈的东西。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接