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

时间:2018-07-17 00:18:08

标签: java iterator stack

我试图通过以下方式使用迭代器遍历堆栈:

Iterator it = stack.iterator();
while(it.hasNext())
    System.out.print(it.next()+"\t");  

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

N.B: 我知道以下代码将为堆栈操作提供适当的输出。我对迭代器的行为感到好奇。

Iterator it2 = stack.iterator();
while(it2.hasNext())
    System.out.print(stack.pop()+"\t");

1 个答案:

答案 0 :(得分:3)

Stack中的iterator方法是从Vector继承而来的,不会被覆盖,该方法将简单地按插入顺序遍历其元素。这与元素从堆栈中弹出的顺序形成对比。这只是Iterator中的正常Vector行为,与Stack无关。

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

  

将元素推送到此双端队列表示的堆栈上(换句话说,在此双端队列的开头)