Iterator được giới thiệu lần đầu tiên trong phiên bản 1.2 của Java với mục đích nhằm thay thế cho Enumeration bao gồm nhiều phương thức cải thiện hiệu suất và cho phép xóa các phần tử khi duyệt một collection. Ngoài ra, Iterator không đảm bảo thứ tự các phần tử.

1. Iterator trong Java

Được giới thiệu trong phiên bản 1.2 của Java, Iterator là một interface được thêm vào Java để thay thế cho Enumeration. Bạn có thể sử dụng Iterator để thực hiện các hành động sau:

  • 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.

2. Các phương thức của Iterator trong Java

Phương thứcMô tả
boolean hasNext()Trả về true nếu Iterator còn phần tử kế tiếp phần tử đang duyệt.
object next()Trả về phần tử hiện tại và di chuyển con trỏ tới phần tử tiếp theo.
void remove()Loại bỏ phần tử cuối được trả về bởi Iterator.

3. ListIterator interface

Với các collection implement List, chúng ta có thể sử dụng ListIterator, dưới đây là một số phương thức của ListIterator

Phương thứcMô tả
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().
boolean hasNext()Trả về true nếu có phần tử tiếp theo. Nếu không, trả về false.
boolean hasPrevious()Trả về true nếu có phần tử trước. Nếu không, trả về false.
Object next()Trả về phần tử tiếp theo. Một NoSuchEuityException được ném nếu không có phần tử tiếp theo.
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.
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 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().
void set(Object obj)Chỉ định obj cho phần tử hiện tại. Đây là phần tử được trả về lần cuối bởi một lệnh gọi tới next() hoặc previous().

Xem thêm bài viết về chủ đề ngôn ngữ lập trình Java:

- Tìm hiểu về Singleton pattern trong Java

- Tìm hiểu về design pattern factory trong java

- Xử lý timezone trong Java

4. Sử dụng Iterator trong Java

Dưới đây là một ví dụ minh họa sử dụng Iterator và ListIterator trong Java. Lưu ý rằng, ListIterator chỉ khả dụng đối với các Collections có implement List.

public class IteratorMain {

    public static void main(String[] args) {

        List<String> listLanguages = new ArrayList();

        // add element to list
        listLanguages.add("Java");
        listLanguages.add("Python");
        listLanguages.add("PHP");
        listLanguages.add(".NET");
        listLanguages.add("C");
        listLanguages.add("C++");

        // print the list using Iterator
        System.out.println("List programming languages: ");
        Iterator<String> itr = listLanguages.Iterator();
        while (itr.hasNext()) {
            String element = itr.next();
            System.out.println(element);
        }
        System.out.println();

        // alter list language
        ListIterator<String> litr = listLanguages.listIterator();
        while (litr.hasNext()) {
            String element = litr.next();
            litr.set(element + " (CHANGED)");
        }
        System.out.println("List listLanguages after changed: ");
        itr = listLanguages.Iterator();
        while (itr.hasNext()) {
            String element = itr.next();
            System.out.println(element);
        }

        System.out.println();

        System.out.println("Print list with reverse order: ");
        while (litr.hasPrevious()) {
            String element = litr.previous();
            System.out.println(element);
        }
        System.out.println();
        
        // delete element C (CHANGED)
        litr = listLanguages.listIterator();
        while (litr.hasNext()) {
            String element = litr.next();
            if ("C (CHANGED)".equals(element.toString())) {
                litr.remove();
            }
        }

        System.out.println("After alter listLanguages: ");
        itr = listLanguages.Iterator();
        while (itr.hasNext()) {
            String element = itr.next();
            System.out.println(element);
        }
        System.out.println();

    }

}

Chạy chương trình ta thu được đầu ra:

List programming languages:

Java

Python

PHP

.NET

C

C++



List listLanguages after changed:

Java (CHANGED)

Python (CHANGED)

PHP (CHANGED)

.NET (CHANGED)

C (CHANGED)

C++ (CHANGED)



Print list with reverse order:

C++ (CHANGED)

C (CHANGED)

.NET (CHANGED)

PHP (CHANGED)

Python (CHANGED)

Java (CHANGED)



After alter listLanguages:

Java (CHANGED)

Python (CHANGED)

PHP (CHANGED)

.NET (CHANGED)

C++ (CHANGED)

Tạm kết

Interface Iterator cho phép chúng ta sửa đổi một collection khi duyệt qua các phần tử của nó, nếu sử dụng vòng lặp for, while thông thường thì sẽ khó xử lý hơn nhiều so với Iterator.


Stringee Communication APIs là giải pháp cung cấp các tính năng giao tiếp như gọi thoại, gọi video, tin nhắn chat, SMS hay tổng đài CSKH cho phép tích hợp trực tiếp vào ứng dụng/website của doanh nghiệp nhanh chóng. Nhờ đó giúp tiết kiệm đến 80% thời gian và chi phí cho doanh nghiệp bởi thông thường nếu tự phát triển các tính năng này có thể mất từ 1 - 3 năm.

Bộ API giao tiếp của Stringee hiện đang được tin dùng bởi các doanh nghiệp ở mọi quy mô, lĩnh vực ngành nghề như TPBank, VOVBacsi24, VNDirect, Shinhan Finance, Ahamove, Logivan, Homedy,  Adavigo, bTaskee…

Quý bạn đọc quan tâm xin mời đăng ký NHẬN TƯ VẤN TẠI ĐÂY: