web-dev-qa-db-fra.com

Comment pourrais-je itérer une pile en Java

Je me demande comment utiliser l'itérateur dans une classe Stack. Comment créer une classe d'itérateur pour cela?

14
Ervin Lucci

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);
}
18
Baz

Vous pourriez faire:

for (Iterator<MyObject> iterator = stack.iterator(); iterator.hasNext();) {
   MyObject myObject = iterator.next();
   myObject.doStuff();
}
4
Reimeus
Stack<Object> myStack; // obtain your Stack object

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

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
     }
   }
}
1
Andreas_D

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.

0
evanwong