2012-10-18 13 views

Trả lời

16

Chỉ cần có được Iterator qua iterator():

Stack<YourObject> stack = ... 

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

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

Hoặc cách khác, nếu bạn chỉ muốn in tất cả chúng sử dụng enhanced-for loop:

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

Nếu không có iterator - trong khi {... currentSymbol = stack.pop(); ...} –

+2

@HiteshSahu Sau khi chạy (stack.isEmpty()!) mã của bạn, 'Stack' sẽ trống khi' pop() 'loại bỏ phần đầu của ngăn xếp. – Baz

+0

Đồng ý. Tôi đã xây dựng một trình biên dịch và tôi đã sử dụng biến thể này để phân tích cú pháp syntex. –

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

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

Cũng vui lòng viết một số giải thích, mã này làm gì. – Lucifer

4

Bạn có thể làm:

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

Có vẻ như bạn đã triển khai một lớp ngăn xếp tùy chỉnh. "Cái gì đó" của bạn nên triển khai giao diện Iterable và cung cấp việc triển khai 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

Điều đó có nghĩa bạn không sử dụng Java Stack thực hiện? http://docs.oracle.com/javase/6/docs/api/java/util/Stack.html Nó dựa trên Vector không phải hàng đợi.

Nếu bạn đang sử dụng triển khai Java Stack, bạn có thể sử dụng trình lặp như các câu trả lời khác. Nếu không, nếu đó là tùy chỉnh Stack, bạn phải triển khai giao diện Iterable. Và sau đó bạn có thể làm một cái gì đó giống như câu trả lời khác.

Các vấn đề liên quan