Iterator và listIterator trong Java

Iterator và listIterator trong Java

Tags
Iterator
Java
Published
January 21, 2024
Author

Iterator là gì?

Thông thường trong lập trình Java, chúng ta hay sử dụng vòng lặp for để duyệt qua các phần tử trong tập hợp.
 
Hôm nay mình có thêm một công cụ mới để duyệt qua các phần tử trong tập hợp nữa đó là Iterator.

Sử dụng Iterator như thế nào?

 
Ví dụ ta có một List items, kiểu dữ liệu String.
 
List<String> items = …
 

Bước 1: Khai báo Iterator

 
items.iterator();
 
Iterator<String> iter = items.iterator();
 

Bước 2: Duyệt qua các phần tử trong tập hợp bằng phương thức hasNext() kết hợp với while()

 
Phương thức
Mô tả
boolean hasNext()
Trả về true nếu còn phần tử tiếp theo
object next()
Lấy phần tử tiếp theo ra
void remove()
Loại bỏ phần tử hiện tại
while(iter.hasNext()) { System.out.println(iter.next()); }
Khi mình khai báo Iterator thì Iterator’s Cursor ở đây:
notion image
Khi mình chạy code next() thì Iterator’s Cursor chạy qua phần tử đầu tiên:
while(iter.hasNext()) { System.out.println(iter.next()); }
notion image
Tương tự khi dùng hasNext() và next() một lần nữa:
notion image
while (itr.hasNext()) { // Moving cursor to next element int i = itr.next(); // Getting elements one by one System.out.print(i + " "); // Removing odd elements if (i % 2 != 0) itr.remove(); }
 

Iterator và listIterator có giống nhau không?

 
ListIterator là một interface con của Iterator. Nó là một trong các cách giúp bạn duyệt qua (traverse) các phần tử của một List.
 
Khác với IteratorListIterator hỗ trợ duyệt qua các phần tử theo cả 2 hướng tiến và lùi. ListIterator cũng hỗ trợ loại bỏ, cập nhập hoặc chèn một phần tử trong quá trình lặp.
notion image
 
Iterator
ListIterator
Iterator đưọc sử dụng để duyệt qua các interface Set và List.
ListIterator chỉ đuợc sử dụng để duyệt qua List.
Iterator có thể duyệt qua các phần tử trong tập hợp chỉ theo một huớng.
ListIterator có thể duyệt qua List tất cả các hướng (2 hướng).
Không thể thêm, thay thể phần tử khi sử dụng Iterator.
ListIterator cài đặt interface Iterator và chứa thêm một số chức năng mới, như thêm mới một phần tử, thay thế phần từ, lấy chỉ mục (index) cho phần từ kế truớc hay sau nó, etc.

Syntax

ListIterator ltr = l.listIterator();
 

Các phương thức của listIterator

 
Phương thức
Mô tả
boolean hasPrevious()
Trả về true nếu có phần tử trước. Nếu không, trả về false.
Object previous()
Trả về phần tử trước. Một NoSuchEuityException được ném nếu không có phần tử trước đó.
int previousIndex()
Trả về chỉ mục của phần tử trước. Nếu không có phần tử trước, trả về -1.
void set(Object obj)
thay thế
void add(Object obj)
Chèn obj vào phía trước phần tử sẽ được trả về bởi lệnh gọi tiếp theo tới next().
int nextIndex()
Trả về chỉ mục của phần tử tiếp theo. Nếu không có phần tử tiếp theo, trả về kích thước của danh sách.
void remove()
Loại bỏ các phần tử hiện tại khỏi danh sách. Một IllegalStateException được ném nếu remove() được gọi trước next() hoặc trước previous().

Tham khảo