2012-10-18 14 views

Odpowiedz

16

Wystarczy dostać Iterator poprzez iterator():

Stack<YourObject> stack = ... 

Iterator<YourObject> iter = stack.iterator(); 

while (iter.hasNext()){ 
    System.out.println(iter.next()); 
} 

Lub alternatywnie, jeśli chcesz po prostu je wszystkie wydrukować użyć enhanced-for loop:

for(YourObject obj : stack) 
{ 
    System.out.println(obj); 
} 
+0

Bez iterator - podczas {... currentSymbol = stack.pop(); ...} –

+2

@HiteshSahu Po biegania (stack.isEmpty()!) Twój kod, 'Stack' będzie pusty, ponieważ' pop() 'usuwa górę stosu. – Baz

+0

Zgadzam się. Budowałem kompilator i używałem tej odmiany do parsowania syntexów. –

1
Stack<Object> myStack; // obtain your Stack object 

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

Proszę również napisać wyjaśnienie, co robi ten kod. – Lucifer

4

Można zrobić:

for (Iterator<MyObject> iterator = stack.iterator(); iterator.hasNext();) { 
    MyObject myObject = iterator.next(); 
    myObject.doStuff(); 
} 
1

Wygląda na to, że zaimplementowano niestandardową klasę stosu. Twoje "coś" powinno implementować interfejs Iterable i zapewniać implementację 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 
    } 
    } 
} 
0

I am working on something that is implementing a stack using queues

Czy to znaczy, że nie używasz Stack implementację Javy? http://docs.oracle.com/javase/6/docs/api/java/util/Stack.html Jest on oparty na Vector nie kolejek.

Jeśli używasz implementacji Java Stack, możesz używać iteratora, tak jak w przypadku innych odpowiedzi. W przeciwnym razie, jeśli jest to niestandardowe Stack, musisz zaimplementować interfejs Iterable. A potem możesz zrobić coś podobnego do innych odpowiedzi.