【发布时间】:2021-05-27 09:14:55
【问题描述】:
当使用 Java 的 foreach 语法时,Stack 不对输出元素使用 LIFO 排序。考虑以下代码:
import java.util.Queue;
import java.util.Stack;
import java.util.LinkedList;
public class QueueStackTest {
private static int[] numbers = {1, 2, 3, 4, 5};
public static void main(String[] args) {
Stack<Integer> s = new Stack<Integer>();
Queue<Integer> l = new LinkedList<Integer>();
for (int i : numbers) {
s.push(i);
l.offer(i);
}
System.out.println("Stack: ");
for(Integer i : s) {
System.out.println(i);
}
System.out.println();
System.out.println("Queue:");
for(Integer i : l) {
System.out.println(i);
}
}
}
输出:
Stack:
1
2
3
4
5
Queue:
1
2
3
4
5
问题:
- 这有意义吗?是错误吗?
- 我能否保证这至少会以正确的顺序返回队列元素?
- 当使用(处理)
Stack或Queue时,这是最好的方法吗?或者我应该用类似的东西做一个更手动的循环:while(!s.isEmpty()) { handle(s.pop()); }或while(!l.isEmpty()) { handle(l.poll()); }
【问题讨论】:
-
你试过只使用普通的 for 循环吗?