NỘI DUNG BÀI VIẾT
Những điều cơ bản cần biết
Trước khi nói đến Iterator và cách sử dụng Iterator, bạn phải biết:
- Mỗi collection là một Iterable. Ta có thể lấy đối tượng Iterable của nó để duyệt toàn bộ các phần tử trong collection.
- Interface Collection kế thừa từ interface Iterable. interface Iterable định nghĩa phương thức iterator, trả về một iterator.
Nói đến Iterator thì bạn sẽ muốn duyệt qua các phần tử trong một tập hợp. Ví dụ, bạn có thể muốn hiển thị mỗi phần tử.
Cách đơn giản nhất để thực hiện điều này là gọi đến một Iterator, là một đối tượng mà triển khai Iterator hoặc List Iterator interface.
Một đối tượng Iterator là có khả năng duyệt qua phần tử, lấy phần tử, loại bỏ phần tử khỏi tập hợp. Thường trước khi truy cập một tập hợp, bạn phải có một Iterator. Các tập hợp đều cung cấp phương thức iterator để lấy Iterator bắt đầu của tập hợp.
Trước khi bạn có thể truy cập một Collection thông qua một Iterator, bạn phải có được nó. Mỗi lớp Collection cung cấp một phương thức iterator() mà trả về một iterator tới phần bắt đầu của Collection. Bởi sử dụng đối tượng Iterator, bạn có thể truy cập mỗi phần tử trong Collection, từng phần tử một tại một thời điểm.
Nói chung, để sử dụng một iterator để tuần hoàn qua các nội dung của một Collection, bạn theo các bước sau:
- Đạt được một iterator tới phần đầu của Collection bằng cách gọi phương thức iterator() của Collection trong Java.
- Thiết lập một vòng lặp mà tạo triệu hồi tới hasNext(). Vòng lặp này lặp đi lặp lại tới khi hasNext() trả về true.
- Trong vòng lặp, thu được mỗi phần tử bởi triệu hồi phương thức next().
Ví dụ đơn giản
Sử dụng Iterator để hiển thị nội dung LinkedList
import java.util.ArrayList; import java.util.Iterator; import java.util.ListIterator; public class IteratorDemo { public static void main(String args[]) { ArrayList<String> list = new ArrayList<>(); // them phan tu vao array list list.add("A"); list.add("B"); list.add("C"); list.add("D"); list.add("E"); list.add("F"); // su dung iterator de hien thi noi dung cua list System.out.println("Danh sach n: "); Iterator<String> itr = list.iterator(); while (itr.hasNext()) { Object element = itr.next(); System.out.println(element); } System.out.println(); // sua cac phan tu duoc lap ListIterator<String> litr = list.listIterator(); while (litr.hasNext()) { Object element = litr.next(); litr.set(element + " "); } System.out.println("Noi dung da duoc sua cua list: "); itr = list.iterator(); while (itr.hasNext()) { Object element = itr.next(); System.out.println(element); } System.out.println(); // hien thi cac phan tu theo thu tu nguoc lai System.out.println("Noi dung da duoc sua cua list " + "theo thu tu nguoc lai: "); while (litr.hasPrevious()) { Object element = litr.previous(); System.out.println(element); } System.out.println(); // xoa phan tu C litr = list.listIterator(); while (litr.hasNext()) { Object element = litr.next(); if ("C".equals(element.toString())) { litr.remove(); } } System.out.println("Noi dung da duoc sua cua list: "); itr = list.iterator(); while (itr.hasNext()) { Object element = itr.next(); System.out.println(element); } System.out.println(); } }
Các phương thức và miêu tả
1. boolean hasNext( )
Trả về true nếu có nhiều phần tử. Nếu không là false.
2. Object next( )
Trả về phần tử kế tiếp. Ném NoSuchElementException nếu không có một phần tử kế tiếp.
3. void remove( )
Gỡ bỏ phần tử hiện tại. Ném IllegalStateException nếu cố gắng gọi phương thức remove() mà không được đặt trước một triệu hồi tới next().
Sự liên quan giữa Iterator và Iterable
Iterator và Iterable có sự liên quan chặt chẽ với nhau.
Ta thử Coi Iterator là một giao diện giúp chúng ta duyệt qua bộ sưu tập với sự trợ giúp của một số phương thức không xác định như hasNext(), next() và remove().
Mặt khác, Iterable là một giao diện khác, nếu được triển khai bởi một lớp sẽ buộc lớp đó có thể lặp và là mục tiêu cho cấu trúc For-Each. Nó chỉ có một phương thức có tên iterator () xuất phát từ chính giao diện Iterator.
Khi một bộ sưu tập có thể lặp lại, thì nó có thể được lặp lại bằng cách sử dụng một trình vòng lặp.
Tóm lại:
Iterator trong Java là một interface được sử dụng để thay thế Enumerations trong Java Collection Framework. Bạn có thể sử dụng iterator để:
- Duyệt các phần tử từ đầu đến cuối của một collection.
- Iterator cho phép xóa phần tử khi lặp một collection.
- Với một số phương thức của Iterator mà bạn có thể tham khảo.