当使用Java的for每种语法时,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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
Stack:
1
2
3
4
5
Queue:
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)
问题:
Stack或a时Queue,这是最好的方法吗?或者我应该使用以下内容进行更多手动循环:while(!s.isEmpty()) { handle(s.pop()); }或while(!l.isEmpty()) { handle(l.poll()); }fvu*_*fvu 19
Stack的Javadoc中有一个有趣的脚注:
Deque接口及其实现提供了更完整和一致的LIFO堆栈操作集,应优先使用此类.例如:
Deque stack = new ArrayDeque();
您的程序的扩展版本:
public static void main(String[] args) {
Stack<Integer> s = new Stack<Integer>();
Deque<Integer> d = new ArrayDeque<Integer>();
Queue<Integer> l = new LinkedList<Integer>();
for (int i : numbers) {
s.push(i);
l.offer(i);
d.push(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);
}
System.out.println();
System.out.println("Deque:");
for(Integer i : d) {
System.out.println(i);
}
}
Run Code Online (Sandbox Code Playgroud)
给
....
Deque:
5
4
3
2
1
Run Code Online (Sandbox Code Playgroud)
因此,可以切换到Deque以获得更一致的行为.
| 归档时间: |
|
| 查看次数: |
9935 次 |
| 最近记录: |