使用java.util.Stack.iterator显示堆栈的内容

时间:2014-01-21 00:48:11

标签: java iterator stack

在下面的代码中,我将1,5,3分别推入堆栈意味着顶部3位于堆栈顶部,1位于底部(这种情况)但是当我使用迭代器显示内容时在堆栈中,迭代器显然将堆栈视为队列和

而不是显示

3'; -5℃-1<!汉字

输出:

1·; -5℃; -3 LT;!汉字

为什么迭代器会这样做?

如果这是迭代器的自然行为,那么如何在不使用pop的情况下显示Stack的内容?

import java.util.Iterator;
import java.util.Stack;

public class MyStack{

    Stack<Integer> stack = new Stack<>();

    public void display(){
                Iterator <Integer> it = stack.iterator();
                while(it.hasNext()){
                    System.out.print(it.next()+"<-");
                }
        System.out.println("Bottom!");
    }


    void pushAll(int [] data){
        for(int i:data){
            stack.push(i);
        }
    }


    public static void main(String [] org){
        MyStack stak= new MyStack();
        stak.pushAll(new int [] {1,5,3});
        stak.display();
    } 


}

控制台:

1<-5<-3<-Bottom!

虽然它应该输出:

3<-5<-1<-Bottom!

2 个答案:

答案 0 :(得分:1)

hacky方式是使用listIterator并从最后开始:

ListIterator<Integer> it = stack.listIterator(stack.size());
while(it.hasPrevious()){
    System.out.print(it.previous()+"<-");
}
System.out.println("Bottom!");

答案 1 :(得分:1)

你......不。迭代器只采用一种方式(具体而言,与Vector中的方式相同,因为StackVector的子类,因此它来自ListIterator

从技术上讲,你可以使用Stack解决这个问题,但实际上这是javadoc建议不再使用Deque类的原因之一。

根据建议使用带有descendingIterator()界面的类(例如ArrayDeque),然后进行Iterator<Integer> it = arrayDeque.descendingIterator(); while(it.hasNext()){ System.out.print(it.next()+"<-"); } 调用。

{{1}}