Подтвердить что ты не робот

Как я буду перебирать стек в Java

Мне интересно, как использовать итератор в классе Stack. Как создать для него класс итератора?

4b9b3361

Ответ 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. И тогда вы можете сделать что-то вроде других ответов.