我想知道如何在堆栈类中使用迭代器。我该如何为其创建一个迭代器类?
只需通过 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);
}
pop()
会移除栈顶元素,因此Stack
将为空。 - Bazfor (Iterator<MyObject> iterator = stack.iterator(); iterator.hasNext();) {
MyObject myObject = iterator.next();
myObject.doStuff();
}
Stack<Object> myStack; // obtain your Stack object
Iterator iterator = myStack.iterator();
while (iterator.hasNext()) {
Object object = iterator.next();
}
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
}
}
}
我正在做一个使用队列实现栈的东西。
这意味着你没有使用Java的Stack
实现吗?
http://docs.oracle.com/javase/6/docs/api/java/util/Stack.html
它是基于Vector而不是队列的。
如果你正在使用Java的Stack
实现,你可以像其他答案一样使用迭代器。
否则,如果那是一个自定义的Stack
,你必须实现Iterable
接口。然后你可以像其他答案一样做一些事情。