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:
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()); }
Tương tự khi dùng hasNext() và next() một lần nữa:
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 Iterator, ListIterator 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.
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(). |