Enumeration vs Lặp lại
Có nhiều cấu trúc dữ liệu hoạt động như tập hợp trong Java như Vectors, Hash table và các lớp thực hiện Java Collections Framework (tức là HashMap, HashSet, ArrayList, TreeSet, TreeMap, LinkedList, LinkedHashMap và LinkedHashSet). Có nhiều cách để lặp qua các phần tử riêng lẻ của các đối tượng trong Java. Java cung cấp hai giao diện để thực hiện công việc này dễ dàng hơn. Enumeration và Iterator là hai trong số các giao diện được tìm thấy trong gói java.util cung cấp chức năng liệt kê thông qua các chuỗi hoặc đối tượng với một tập hợp các mục. Điều tra viên đã được giới thiệu trong JDK 1.0 và Iterator được giới thiệu trong JDK 1.2 hầu như sao chép chức năng của Enumerator (trong Khung Bộ sưu tập).
Enumeration là gì?
Enumeration là một giao diện công cộng trong Java, được giới thiệu trong JDK 1.0, cung cấp khả năng liệt kê thông qua chuỗi các phần tử. Nó được tìm thấy trong gói java.util. Khi giao diện Enumeration được thực hiện bởi một đối tượng, đối tượng đó có thể tạo ra một chuỗi các phần tử. Giao diện điều tra có hai phương pháp. Phương thức hasMoreElements () sẽ kiểm tra xem kiểu liệt kê này có chứa nhiều phần tử hơn hay không và nextElement () trả về phần tử tiếp theo trong chuỗi (nếu còn ít nhất một phần tử nữa). Nói cách khác, bằng cách gọi nextElement () liên tiếp, lập trình viên có thể truy cập các phần tử riêng lẻ trong chuỗi. Ví dụ: để in tất cả các phần tử trong Vectơ v1 bằng Enumerator, đoạn mã sau có thể được sử dụng.
Phép liệt kê e=v1.elements ();
Trong khi (e.hasMoreLements ()) {
System.out.println (e.nextElement ());
}
Enumerator cũng có thể được sử dụng để xác định luồng đầu vào cho các đối tượng SequenceInputStream.
Iterator là gì?
Iterator là một giao diện công khai trong gói Java.util, cho phép lặp qua các phần tử của các đối tượng tập hợp triển khai khuôn khổ Collections (chẳng hạn như ArrayList, LinkedList, v.v.). Điều này đã được giới thiệu trong JDK 1.2 và thay thế Điều tra viên trong Khung Bộ sưu tập Java. Iterator có ba phương thức. Phương thức hasNext () kiểm tra xem có phần tử còn lại trong bộ sưu tập hay không và phương thức next () trả về phần tử tiếp theo trong chuỗi. Phương thức remove () có thể được sử dụng để loại bỏ phần tử hiện tại khỏi tập hợp bên dưới. Ví dụ: để in tất cả các phần tử trong Vector v1 bằng Iterator, có thể sử dụng đoạn mã sau.
Iterator i=v1.elements ();
Trong khi (i.hasNext ()) {
System.out.println (e.next ());
}
Sự khác biệt giữa Enumeration và Iterator là gì?
Mặc dù, Enumeration và Iterator là hai trong số các giao diện được tìm thấy trong gói java.util, cho phép lặp / liệt kê thông qua các phần tử của một chuỗi, chúng có sự khác biệt. Trên thực tế, Iterator, được giới thiệu sau Enumeration, thay thế Enumeration trong khung Java Collections. Không giống như Enumeration, Iterator là không an toàn. Điều này có nghĩa là các sửa đổi đồng thời (đối với tập hợp bên dưới) không được phép khi lặp lại được sử dụng. Điều này rất hữu ích trong môi trường đa luồng, nơi luôn có nguy cơ sửa đổi đồng thời. Trong trường hợp sửa đổi đồng thời, đối tượng Iterator sẽ ném ra một ConcurrentModificationException. Iterator có tên phương thức ngắn hơn so với Enumerator. Hơn nữa, trình lặp có chức năng bổ sung là xóa các phần tử trong quá trình lặp (không thể sử dụng Trình điều tra). Vì vậy, nếu có nhu cầu xóa các phần tử khỏi bộ sưu tập, thì Iterator là lựa chọn duy nhất có thể được xem xét.