vin*_*hew 32 java algorithm stack data-structures
今天我试图在java.util.Stack
课堂上推进,然后Iterator
通过项目使用迭代(不使用pop).我期待着LIFO的财产但却感到惊讶.
这是我正在尝试的代码.
import java.util.*;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
RobStack<Integer> rstack = new RobStack<Integer>(); // Correct Implementation
Stack<Integer> jstack = new Stack<Integer>(); // Default Java Implementation
rstack.push(0); jstack.push(0);
rstack.push(1); jstack.push(1);
rstack.push(2); jstack.push(2);
rstack.push(3); jstack.push(3);
System.out.print("Algo Stack: ");
for (int i : rstack)
System.out.print(i + " ");
System.out.print("\nJava Stack: ");
for (int i : jstack)
System.out.print(i + " ");
}
}
Run Code Online (Sandbox Code Playgroud)
以上程序的输出如下:
Algo Stack: 3 2 1 0
Java Stack: 0 1 2 3
Run Code Online (Sandbox Code Playgroud)
在上面的代码中jstack
使用了默认的Java实现,并rstack
使用Robert Sedgewick提供的实现来获取他的Algorithm类.我发现罗伯特教授的实施工作正常,但java.util.Stack
实施失败了.
它是一个错误还是设计?
Bil*_*ard 29
请参阅错误ID 4475301:RFE:java.util.Stack.iterator()以错误的方式迭代.这种行为是(坏的)设计.Java的内置Stack
迭代器方法继承自其他类,因此它们的行为与您期望的不同.
您应该使用Deque而不是Stack.
Deque<Integer> stack = new ArrayDeque<Integer>();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8933 次 |
最近记录: |