如何遍历栈java
遍历栈的方法
在Java中,栈(Stack)通常指java.util.Stack类或更现代的Deque接口实现(如ArrayDeque)。由于栈遵循LIFO(后进先出)原则,直接遍历会破坏栈的结构。以下是几种遍历栈的方法:
使用迭代器
Stack类继承自Vector,支持迭代器遍历,但会按插入顺序(栈底到栈顶)输出:
Stack<Integer> stack = new Stack<>();
stack.push(1);
stack.push(2);
stack.push(3);
Iterator<Integer> it = stack.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
通过循环弹出元素
这是最符合栈特性的遍历方式,但会清空栈:
while (!stack.isEmpty()) {
System.out.println(stack.pop());
}
保留原栈的临时副本
若需保留原栈,可先复制一份再遍历:
Stack<Integer> tempStack = (Stack<Integer>) stack.clone();
while (!tempStack.isEmpty()) {
System.out.println(tempStack.pop());
}
使用Deque的逆向迭代器
若使用ArrayDeque模拟栈,可利用其逆向迭代器:

Deque<Integer> deque = new ArrayDeque<>();
deque.push(1);
deque.push(2);
Iterator<Integer> it = deque.descendingIterator();
while (it.hasNext()) {
System.out.println(it.next());
}
注意事项
- 直接迭代
Stack会按存储顺序输出(栈底到栈顶),可能不符合预期。 - 优先考虑
Deque替代Stack,因其性能更优且功能更丰富。 - 遍历后需清空的场景适合用
pop(),否则应使用副本或迭代器。






