2012-10-18 16 views

回答

16

剛剛獲得Iterator通過iterator()

Stack<YourObject> stack = ... 

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

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

或者,如果你只是想全部打印出來使用enhanced-for loop

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

沒有迭代器 - 而{... currentSymbol = stack.pop(); ...} –

+2

@HiteshSahu運行後(stack.isEmpty()!)你的代碼,'stack'將會是空的,因爲'pop()'移除了棧頂。 – Baz

+0

同意。我正在構建一個編譯器,並且正在使用這個變體進行syntex解析。 –

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

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

請也寫一些解釋,這段代碼是做什麼的。 – Lucifer

4

你可以這樣做:

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

聽起來像你實現了一個自定義堆棧類。你的「東西」應該實現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 
    } 
    } 
} 
0

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 它基於矢量而不是隊列。

如果您正在使用Java Stack實現,則可以像使用其他答案一樣使用迭代器。 否則,如果這是自定義Stack,則必須實現Iterable接口。然後你可以做一些其他的答案。