Java 中的 Iterator 和 Iterable 介面

Sarwan Soomro 2024年2月15日
  1. Java 中 Iterator 和 Iterable 的區別
  2. Java 中迭代器的實現
  3. Java 中的自定義 Iterable 和 Iterator
  4. Java 中解決的 Iterator 和 Iterable
Java 中的 Iterator 和 Iterable 介面

可迭代物件就像倉庫中的貨物集合,而迭代器是該倉庫的管理員。

可能不知道有多少產品?因此,有人可能會問迭代器,你有沒有這個專案?

Java 中 Iterator 和 Iterable 的區別

Iterator 和 iterable 是物件的集合。這些與陣列和包裝器沒有任何不同。

不過,這兩種方法都會覆蓋它們,以允許你以最適合你要求的方式繼承物件。

物件可以針對可迭代介面中的擴充套件 for 語句,通常稱為 for each 迴圈。它的型別引數是 <T>,指定 iterator<> 返回的元素的型別。

語法:

public class IteratorAndIterable<T> implements Iterable<T> {}

iterator<> 返回迭代器 <T> 元素的例項。

它也是一個物件、一個收集器,或者只是一個介面。以下引數將進一步處理返回的例項。

引數:

  1. hasNext();:如果迭代有其他元素,則返回 true。
  2. next();:該方法返回迭代中的下一個元素。
  3. remove();:刪除此迭代器從基礎集合返回的最終元素。

語法:

// Custom Iterator
public class myCustomiterator<T> implements Iterator<T> {
  // hasNext()
  public boolean hasNext() {
    // your code goes here
    return false;
  }
  // next()
  public E next() {
    // your code goes here
    return false;
  }
}

Java 中迭代器的實現

我們將從陣列列表中動態生成一個 iterator<>,向你展示如何遍歷每個元素。

程式碼:

import java.util.*;
// Main class
public class ExplainIterator {
  public static void main(String[] args) {
    ArrayList<String> demolist = new ArrayList<String>();
    demolist.add("Here");
    demolist.add("Is");
    demolist.add("Iterator");
    demolist.add("Demo");
    /*
     * Now, we are going to dynamically generate Iterator from the Arrays List for
     * traversing each element
     */
    /*
     * Iterator method has two parameters: hasNext() and next(). The hasNext()
     * returns boolean (true or false). While the next() method returns next
     * complete token (it hasNext() gave it one).
     */
    Iterator<String> demo = demolist.iterator();
    while (demo.hasNext()) {
      System.out.println(demo.next());
    }
    // Iterator method
  }
  // main function
}
// main class

在這個例子中,iterator<> 方法討論了兩個引數,hasNext()next(),工作得非常好。

hasNext() 返回 true。而 next() 方法返回完整的令牌,因為 hasNext() 給了它一個。

最後,我們將索引從 iterator<> 中迴圈出來。

輸出:

Here
Is
Iterator
Demo

Java 中的自定義 Iterable 和 Iterator

你還記得這些概念的真例項子嗎?如果是,那麼現在是實施這些方法的時候了。

在 Java 中,你必須使用帶有可迭代物件的迭代器。你的 iterable<> 集合必須在其迭代器的幫助下返回一個特定物件。

你將在以下程式碼塊中準確瞭解它的全部內容。

IteratorAndIterable.java

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

// You will inherit it
// Define Custom Iterable
public class IteratorAndIterable<T> implements Iterable<T> {
  // An array list (setL: setlist)
  private List<T> setL = new ArrayList<>();
  // Get value from the List
  public void add(T getback) {
    setL.add(getback);
  }
  // Define Iterator to get your iterable objects
  public Iterator<T> iterator() {
    return new myCi<T>(setL);
  }
  // Your custom iterator overrides Iterator
  public class myCi<E> implements Iterator<E> {
    // For a condition to avoid exception later
    int SP = 0;
    // Custom Array List
    List<E> CAL;
    public myCi(List<E> CAL) {
      this.CAL = CAL;
    }
    // Check the iterator values
    public boolean hasNext() {
      if (CAL.size() >= SP + 1) {
        // Remember SP = 0? To avoid exception
        // If hasNext() has value, it returns true
        return true;
      }
      return false;
    }
    // Use next() to get the token that hasNext() just passed
    // No need to use default values, make use of the your custom <E>
    public E next() {
      // Get token and store it into getback
      E getback = CAL.get(SP);
      // You can do anything with this loop now
      SP++;
      // return getback instead of deafault value (Now check line number 122) It will be clear
      return getback;
    }
    public void remove() {}
  }
}

Java 中解決的 Iterator 和 Iterable

這段程式碼逐步解釋了每一行程式碼。請檢查評論。我們擴充套件了一個 Iterable<> 並建立了我們自己的。

後來,我們在 iterable<> 中建立了一個 iterator<> 並完全覆蓋了我們希望它的行為方式。

迭代器的 hasNext() 通過 next() 傳遞,我們的自定義列表已準備好選擇它。

現在我們將建立一個簡單的類來定義一個陣列列表。然後我們將向你展示如何從該程式碼塊中獲取可迭代物件並在下一個中列印它。

注意
你將使用以下程式從 hasNext() 傳遞的 next() 獲取條目/令牌,從自定義迭代器使用自定義迭代器進行迭代。

ExecuteIterable.java

// Get object from the iterable
public abstract class ExecuteIterable {
  public static void main(String[] args) {
    // Your former class of custom Iterable and Iterator
    IteratorAndIterable<String> Lst = new IteratorAndIterable<>();
    // Valuse
    Lst.add("EAST");
    Lst.add("WEST");
    Lst.add("NORTH");
    Lst.add("SOUTH");
    // For each loop to extract values from the iterator
    for (String indx : Lst) {
      // Print
      System.out.println(indx);
    }
  }
}

輸出:

EAST
WEST
NORTH
SOUTH

iterable vs iterator java 示例

作者: Sarwan Soomro
Sarwan Soomro avatar Sarwan Soomro avatar

Sarwan Soomro is a freelance software engineer and an expert technical writer who loves writing and coding. He has 5 years of web development and 3 years of professional writing experience, and an MSs in computer science. In addition, he has numerous professional qualifications in the cloud, database, desktop, and online technologies. And has developed multi-technology programming guides for beginners and published many tech articles.

LinkedIn

相關文章 - Java Iterator