19

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

4

5 回答 5

22

只需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);
}
于 2012-10-18T14:36:41.043 回答
4

你可以这样做:

for (Iterator<MyObject> iterator = stack.iterator(); iterator.hasNext();) {
   MyObject myObject = iterator.next();
   myObject.doStuff();
}
于 2012-10-18T14:39:59.843 回答
1

听起来您实现了一个自定义堆栈类。您的“某物”应该实现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
     }
   }
}
于 2012-10-18T14:44:31.347 回答
1
Stack<Object> myStack; // obtain your Stack object

Iterator iterator = myStack.iterator();
while (iterator.hasNext()) {
   Object object = iterator.next();
}
于 2012-10-18T14:39:19.597 回答
0

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

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

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

于 2012-10-18T14:45:00.357 回答