首页 > 解决方案 > 为什么堆栈迭代器以相反的顺序工作?

问题描述

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

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

我刚刚注意到它以相反的顺序迭代。是不是因为迭代器总是指向集合的开始(对于这种情况,迭代器指向向量的声明)。

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

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

标签: javaiteratorstack

解决方案


iteratorinStack方法继承自 in ,而不是覆盖 in ,Vector它只会按插入顺序遍历其元素。这与从堆栈中弹出元素的顺序相反。这只是 中的正常Iterator行为Vector,与 无关Stack

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

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


推荐阅读