为什么堆栈迭代器以相反的顺序工作?

rat*_*ahy 2 java stack iterator

我试图使用迭代器迭代堆栈:

Iterator it = stack.iterator();
while(it.hasNext())
    System.out.print(it.next()+"\t");  
Run Code Online (Sandbox Code Playgroud)

我只是注意到它以相反的顺序迭代。是因为迭代器总是指向集合的开始(在这种情况下迭代器指向向量的状态)。

注意:我知道下面的代码将为堆栈操作提供正确的输出。我对迭代器的行为很好奇。

Iterator it2 = stack.iterator();
while(it2.hasNext())
    System.out.print(stack.pop()+"\t");
Run Code Online (Sandbox Code Playgroud)

rge*_*man 6

iteratorin 中的方法继承Stack自,而不是重写 in Vector,它只是按插入顺序迭代其元素。这与元素从堆栈中弹出的顺序形成对比。这只是正常Iterator行为Vector,与此无关Stack

如果您想要功能更齐全的Stack,请使用接口的实现Deque,例如ArrayDeque。它同时实现了堆栈和队列功能。因为它将push元素放在 的前面,所以Deque从前到后处理元素的迭代器将按照元素从堆栈中弹出的顺序给出元素。

将一个元素推送到此双端队列表示的堆栈上(换句话说,位于此双端队列的头部)