Trong bài viết này, chúng ta sẽ cùng tìm hiểu về ListIterator Interface trong Java cùng với ví dụ dẫn chứng.
ListIterator Interface
ListIterator Interface cung cấp chức năng để truy cập các phần tử của danh sách. Nó có tính hai chiều. Điều này có nghĩa là Interface này cho phép chúng ta lặp lại các phần tử của danh sách theo cả hai hướng. Nó kế thừa từ Iterator Interface. List Interface cung cấp một phương thức listIterator() để trả về một thể hiện của ListIterator Interface.
Các phương thức của ListIterator
ListIterator Interface cung cấp các phương thức có thể được sử dụng để thực hiện các thao tác khác nhau trên các phần tử của danh sách.
- Phương thức hasNext(): Trả về true nếu có một phần tử trong danh sách.
- Phương thức next(): Trả về phần tử tiếp theo của danh sách.
- Phương thức nextIndex(): Trả về chỉ mục của phần tử mà phương thức next() sẽ trả về.
- Phương thức previous(): Trả về phần tử trước của danh sách.
- Phương thức previousIndex(): Trả về chỉ mục của phần tử mà phương thức previous() sẽ trả về.
- Phương thức remove(): Loại bỏ phần tử được trả về bởi next() hoặc previous().
- Phương thức set(): Thay thế phần tử được trả về bởi phương thức next() hoặc previous() với phần tử được chỉ định.
Ví dụ 1: Triển khai ListIterator.
Trong ví dụ dưới đây, chúng ta sẽ triển khai các phương thức duyệt phần tử theo hướng phía trước gồm có next(), nextIndex() và hasNext() của ListIterator Interface trong một danh sách mảng.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import java.util.ArrayList; import java.util.ListIterator; class Main { public static void main(String[] args) { ArrayList<Integer> so_nguyen = new ArrayList<>(); so_nguyen.add(34); so_nguyen.add(56); so_nguyen.add(78); so_nguyen.add(86); System.out.println(so_nguyen); ListIterator<Integer> phan_tu = so_nguyen.listIterator(); int a = phan_tu.next(); System.out.println(a); int b = phan_tu.nextIndex(); System.out.println(b); System.out.println(phan_tu.hasNext()); } } |
Kết quả:
1 2 3 4 |
[34, 56, 78, 86] 34 1 True |
Ví dụ 2: Triển khai ListIterator.
Trong ví dụ dưới đây, chúng ta sẽ triển khai các phương thức duyệt phần tử theo hướng ngược lại, lùi về phía sau bao gồm previous() và previousIndex() của ListIterator Interface cho danh sách mảng.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import java.util.ArrayList; import java.util.ListIterator; class Main { public static void main(String[] args) { ArrayList<Integer> so_nguyen = new ArrayList<>(); so_nguyen.add(43); so_nguyen.add(56); so_nguyen.add(78); so_nguyen.add(89); ListIterator<Integer> phan_tu = so_nguyen.listIterator(); phan_tu.next(); phan_tu.next(); int a = phan_tu.previous(); System.out.println(a); int b = phan_tu.previousIndex(); System.out.println(b); } } |
Kết quả:
1 2 3 |
56 0 |
Trong ví dụ trên, ban đầu, thể hiện của Iterator là trước 43. Vì không có phần tử nào trước 43 nên việc gọi phương thức previous() sẽ đưa ra một ngoại lệ. Sau đó chúng ta sử dụng phương thức next() 2 lần. Bây giờ thể hiện của Iterator sẽ nằm tại phần tử 78. Do đó, phương thức previous() sẽ trả về là 56.
Điểm khác biệt giữa Iterator và ListIterator
Iterator | ListIterator |
Có thể được sử dụng để duyệt phần tử của bất kỳ tập hợp nào. | Chỉ có thể được sử dụng để duyệt phần tử của các tập hợp danh sách bao gồm LinkedList, ArrayList và một số tập hợp danh sách khác. |
Chỉ có thể duyệt phần tử theo hướng tiến về phía trước. | Có thể duyệt phần tử theo cả hai hướng là lùi về phía sau và tiến về phía trước. |
Đối tượng có thể được tạo bằng cách gọi phương thức iterator() của một lớp tập hợp. | Đối tượng có thể được tạo bằng cách gọi phương thức listIterator() của một lớp tập hợp. |
Không cho phép xóa các phần tử. | Cho phép xóa các phần tử. |
Đưa ra ngoại lệ ConcurrentModificationException trong thao tác thêm phần tử. Do đó, việc thêm phần tử là không được cho phép. | Việc thêm phần tử được cho phép. |
Không thể truy cập vào chỉ số của phần tử được duyệt. | Phương thức nextIndex() and nextPrevious() được sử dụng để truy cập vào chỉ số của phần tử được duyệt. |
Không cho phép thay đổi các phần tử. | Cho phép thay đổi các phần tử. |
Trên đây là khái niệm và ví dụ cơ bản về ListIterator Interface trong Java. Hy vọng mọi người có thể áp dụng vào trong chương trình của mình. Mọi người hãy tiếp tục theo dõi các bài tiếp theo và cập nhật các bài mới nhất trên tek4 nhé!
P/s: Cảm ơn mọi người!