Hôm nay tôi đã cố gắng để đẩy trong java.util.Stack
lớp và sau đó sử dụng Iterator
để lặp (không sử dụng pop) thông qua các mục. Tôi đã mong đợi tài sản LIFO nhưng đã ngạc nhiên.Có lỗi trong Iterator của java.util.Stack không?
Đây là mã mà tôi đang thử.
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 + " ");
}
}
Kết quả chương trình trên được đưa ra dưới đây:
Algo Stack: 3 2 1 0
Java Stack: 0 1 2 3
Trong đoạn mã trên jstack
sử dụng thực hiện Java mặc định và rstack
sử dụng implementation provided by Robert Sedgewick cho lớp thuật toán của mình. Tôi thấy rằng việc thực hiện của Giáo sư Robert hoạt động tốt nhưng việc triển khai java.util.Stack
không thành công.
Đây có phải là lỗi hoặc là nó bằng thiết kế?
Lưu ý: 'Stack' là lỗi thời, bạn nên sử dụng một 'Deque' thay (ví dụ một' ArrayDeque' – fge
Và những gì nếu bạn sử dụng pop() hoạt động – jtomaszk
Để hỗ trợ bình luận FGE, trong doc? của lớp [Stack] (http://docs.oracle.com/javase/7/docs/api/java/util/Stack.html): 'Một bộ hoàn chỉnh hơn và nhất quán của các hoạt động ngăn xếp LIFO được cung cấp bởi giao diện Deque và các triển khai của nó, nên được sử dụng ưu tiên cho lớp này.' – nhahtdh