Je me demande comment utiliser l'itérateur dans une classe Stack. Comment créer une classe d'itérateur pour cela?
Obtenez juste la Iterator
via iterator()
:
Stack<YourObject> stack = ...
Iterator<YourObject> iter = stack.iterator();
while (iter.hasNext()){
System.out.println(iter.next());
}
Ou bien, si vous voulez simplement les imprimer, utilisez la boucle Enhanced-For :
for(YourObject obj : stack)
{
System.out.println(obj);
}
Vous pourriez faire:
for (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();
}
On dirait que vous avez implémenté une classe de pile personnalisée. Votre "quelque chose" devrait implémenter l'interface Iterable
et fournir une implémentation de 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
}
}
}
I am working on something that is implementing a stack using queues
Cela signifie-t-il que vous n'utilisez pas l'implémentation Java Stack
? http://docs.Oracle.com/javase/6/docs/api/Java/util/Stack.html C'est la base sur Vector pas les files d'attente.
Si vous utilisez l'implémentation Java Stack
, vous pouvez utiliser l'itérateur comme les autres réponses . Sinon, s'il s'agit d'une Stack
personnalisée, vous devez implémenter l'interface Iterable
. Et ensuite, vous pouvez faire quelque chose comme d’autres réponses.