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