Мне интересно, как использовать итератор в классе Stack. Как создать для него класс итератора?
Как я буду перебирать стек в Java
Ответ 1
Просто получите Iterator
через iterator()
:
Stack<YourObject> stack = ...
Iterator<YourObject> iter = stack.iterator();
while (iter.hasNext()){
System.out.println(iter.next());
}
Или, альтернативно, если вы просто хотите их распечатать, используйте цикл расширенного цикла:
for(YourObject obj : stack)
{
System.out.println(obj);
}
Ответ 2
Вы можете сделать:
for (Iterator<MyObject> iterator = stack.iterator(); iterator.hasNext();) {
MyObject myObject = iterator.next();
myObject.doStuff();
}
Ответ 3
Stack<Object> myStack; // obtain your Stack object
Iterator iterator = myStack.iterator();
while (iterator.hasNext()) {
Object object = iterator.next();
}
Ответ 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
Он основан на Vector not queues.
Если вы используете реализацию Java Stack
, вы можете использовать итератор, как и другие ответы.
В противном случае, если это пользовательский Stack
, вам нужно реализовать интерфейс Iterable
. И тогда вы можете сделать что-то вроде других ответов.