在下面的代码中,我将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!
答案 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
中的方式相同,因为Stack
是Vector
的子类,因此它来自ListIterator
。
从技术上讲,你可以使用Stack
解决这个问题,但实际上这是javadoc建议不再使用Deque
类的原因之一。
根据建议使用带有descendingIterator()
界面的类(例如ArrayDeque
),然后进行Iterator<Integer> it = arrayDeque.descendingIterator();
while(it.hasNext()){
System.out.print(it.next()+"<-");
}
调用。
{{1}}