Trình lặp c ++

Nói đến Iterator, 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ị từng phần tử

Cách đơn giản nhất để thực hiện điều này được gọi là Iterator, là một đối tượng mà giao diện khai triển Iterator hoặc List Iterator .

Iterator một đối tượng 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 tập hợp.

Trước khi bạn có thể truy cập một Bộ sưu tập thông qua một Iterator, bạn phải có được nó. Mỗi bộ sưu tập lớp cung cấp một phương thức iterator() trả về một iterator cho phần bắt đầu của bộ sưu tập. Bằng cách sử dụng các đối tượng Iterator, bạn có thể truy cập từng phần tử trong Bộ sưu tập, từng phần tử tại một thời điểm.

Nói chung, để sử dụng một trình vòng lặp để hoàn thành tuần hoàn nội dung của một Bộ sưu tập, bạn theo các bước sau

  • Đạt được một iterator tới phần đầu của Bộ sưu tập bằng cách gọi phương thức iterator() của Bộ sưu tập trong Java
  • Thiết lập một vòng lặp để tạo triệu hồi tới hasNext(). Vòng lặp này sẽ lặp lại khi hasNext() trả về true
  • Trong vòng lặp, thu được từng 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

mport java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;

public class IteratorDemo {
   public static void main(String args[]) {
       ArrayList 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 itr = list.iterator();
       while (itr.hasNext()) {
           Object element = itr.next();
           System.out.println(element);
       }
       System.out.println();

       // sua cac phan tu duoc lap
       ListIterator 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();

   }
}

Methods and descriptions

1. boolean hasNext()

Trả về đúng nếu có nhiều phần tử. If not is false

2. Đối tượng tiếp theo()

Return to next section. Ném NoSuchElementException nếu không có phần tử kế tiếp

3. loại bỏ khoảng trống()

Hiện tại gỡ bỏ phần tử. 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 kết chặt chẽ với nhau

Ta try 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 địnhhasNext (), next () và remove ()

Mặt khác, Có thể lặp lại là một giao diện khác, nếu được khai triển bởi một lớp thì lớp đó có thể lặp lại và là mục . Nó chỉ có một phương thức có tên iterator () xuất phát từ giao diện chính 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 vòng lặp trình

Tóm tắt

Iterator trong Java là một giao diện được sử dụng để thay thế Enumerations trong Java Collection Framework. You can't use iterator for.  

Trong khi phát triển các ứng dụng, chúng ta làm việc với nhiều loại tập hợp như. cấu trúc cây, mảng, tập hợp, bảng trùm, ngăn xếp, hàng đợi, … Cách thức mà tập hợp này lưu trữ các đối tượng của nó rất khác nhau, và nếu bạn muốn truy cập dữ liệu của những đối tượng này, bạn . Khi đó, Iterator mẫu là một giải pháp tốt. Chúng ta có thể sử dụng một giao diện đã được xác định phương thức cụ thể để truy cập từng phần tử của tập hợp. Sử dụng các phương thức này, chúng ta có thể truy xuất các phần tử trong tập hợp theo cách dễ dàng nhất

Trình lặp c ++
Trình lặp c ++

Trình lặp c ++
Trình lặp c ++

Trong phần tiếp theo của bài viết này, chúng ta sẽ cùng tìm hiểu chi tiết về Iterator Pattern, cách cài đặt, lợi ích mà nó mang lại và khi nào chúng ta có thể áp dụng nó

Nội dung

Iterator Pattern là gì?

Cung cấp một cách để truy cập các phần tử của một đối tượng tổng hợp một cách tuần tự mà không để lộ biểu diễn cơ bản của nó

Iterator Pattern là một trong những Pattern thuộc nhóm hành vi (Behavior Pattern). Nó được sử dụng để “Cung cấp một cách thức truy cập tuần tự động tới các phần tử của tổng đối tượng, mà không cần thiết phải tạo ra các phương pháp truy cập riêng cho đối tượng tổng hợp này”

Nói cách khác, một Iterator được thiết kế cho phép xử lý nhiều loại tập hợp khác nhau bằng cách truy cập các phần tử của tập hợp với cùng một phương pháp, cùng một cách định sẵn mà không cần phải hiểu về những điều này

Iterator thường được viết trong Java với tư cách là các lớp độc lập. Ý tưởng thiết kế này là một trong những kỹ thuật được gọi là “đơn nhiệm vụ – ” – một lớp chỉ có duy nhất một công việc để làm. Hãy suy nghĩ rằng tập hợp duy trì các phần tử, một iterator cung cấp cách thức làm việc với các phần tử đó. Đó cũng là lý do tại sao những Iterator có thể làm việc được trong các tập hợp khác nhau

Tách trách nhiệm giữa các lớp rất hữu ích khi một lớp bị thay đổi. Nếu có quá nhiều thứ bên trong một lớp đơn lẻ, sẽ rất khó để viết lại mã nguồn. Khi diễn ra sự thay đổi, một lớp “đơn vị chịu trách nhiệm” sẽ chỉ có một lý do duy nhất để thay đổi

Chúng ta có thể thấy Interator Pattern được áp dụng trong gói java với Trình lặp giao diện trong java. sử dụng. Trình lặp. Giao diện này định nghĩa các phương thức sau

  • Hàm tiếp theo(). Return to next Elementary in a file
  • Hàm hasNext(). Trả về giá trị Đúng nếu vẫn còn phần tử trong tập hợp và trả về sai trong trường hợp ngược

Đó là cách Iterator làm việc. Nó cung cấp một giao diện đơn giản nhất, quán nhất để làm việc với các tập hợp khác nhau

Giả sử rằng Khách hàng phải làm việc với một tập hợp phức tạp và rắc rối (như hình sau) và không biết cách thức làm việc với nó như thế nào

Trình lặp c ++
Trình lặp c ++

Khách hàng có thể sử dụng iterator để thực hiện yêu cầu kết nối với tập hợp và khách hàng có thể sử dụng các phương thức cơ bản của Iterator để giao tiếp với tập hợp. Like after