Java cung cấp hai giao diện này để truyền dữ liệu từng cái một được lưu trữ trong một bộ sưu tập. Việc triển khai nội bộ của trình lặp và trình lặp danh sách làm cho chúng khác nhau nhưng chương trình làm việc chính của cả hai trình lặp là giống nhau.
Sau đây là những điểm khác biệt quan trọng giữa Iterator và ListIterator.
Sr. Không. | Phím | Trình lặp lại | ListIterator |
---|---|---|---|
1 | Có thể áp dụng | Iterator có thể được sử dụng để duyệt qua bất kỳ tập hợp nào bất kể loại tập hợp nào. | Trình vòng lặp danh sách chỉ có thể được sử dụng để lặp chỉ các lớp được triển khai của bộ sưu tập Danh sách như danh sách mảng, danh sách liên kết, v.v. |
2 | Đang gọi | Như đã đề cập, Iterator phải được sử dụng để liệt kê các phần tử trong tất cả các giao diện được triển khai của Bộ sưu tập như Set, List, Queue, Deque và cả trong tất cả các lớp được triển khai của giao diện Map. Đối tượng Iterator có thể được tạo bằng cách gọi phương thức iterator () của giao diện Bộ sưu tập. | Mặt khác, ListIterator phải được sử dụng khi chúng ta muốn liệt kê các phần tử của List. Đối tượng của ListIterator có thể được tạo bằng cách gọi phương thức listIterator () có trong giao diện List. |
3 | Truyền dữ liệu | Chỉ có thể duyệt dữ liệu trong trường hợp trình vòng lặp theo một hướng vì Trình lặp chỉ có thể duyệt theo hướng về phía trước | Trình vòng lặp danh sách có thể truyền theo cả hướng tiến và lùi, điều này làm cho dữ liệu truyền theo cả hai hướng. |
4 | Xóa | Không được phép xóa một phần tử trong trường hợp của trình lặp. | ListIterator có thể thay thế một phần tử trong bộ sưu tập danh sách. |
5 | Bổ sung | Không được phép bổ sung một phần tử trong trường hợp một trình lặp vì nó ném ConcurrentModificationException. | ListIterator có thể dễ dàng thêm một phần tử vào bộ sưu tập danh sách bất kỳ lúc nào. |
6 | Sửa đổi | Không cho phép sửa đổi một phần tử trong trường hợp có trình lặp vì nó ném ConcurrentModificationException. | ListIterator có thể dễ dàng sửa đổi một phần tử trong bộ sưu tập danh sách bất kỳ lúc nào bằng cách gọi phương thức set (). |
7 | Chỉ mục của phần tử | Người ta không thể lấy chỉ mục của phần tử đã duyệt trong bộ sưu tập khi sử dụng trình lặp. | ListIterator có các phương thức như nextIndex () và beforeIndex () để lấy chỉ mục của các phần tử bất kỳ lúc nào trong khi duyệt qua Danh sách. |
Ví dụ về Iterator so với ListIterator
JavaTester.java
import java.io.*; import java.util.*; public class JavaTester { public static void main(String[] args){ ArrayList<Integer> list = new ArrayList<Integer>(); list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); //Iterator Iterator itr = list.iterator(); System.out.println("Iterator traversal:"); while (itr.hasNext()) System.out.print(itr.next() + " "); System.out.println(); // ListIterator ListIterator i = list.listIterator(); System.out.println("ListIterator Forward traversal:"); while (i.hasNext()){ System.out.print(i.next() + " "); System.out.println(); System.out.println("ListIterator Backward traversal : "); } while (i.hasPrevious()){ System.out.print(i.previous() + " "); System.out.println(); } } }
Đầu ra
Iterator traversal: 1 2 3 4 5 ListIterator Forward traversal: 1 ListIterator Backward traversal : 2 ListIterator Backward traversal : 3 ListIterator Backward traversal : 4 ListIterator Backward traversal : 5 ListIterator Backward traversal : 5 4 3 2 1