Java中的迭代器

在Java中,迭代器(Iterator)是Java的一种游标。Java迭代器是一种接口,用于逐个完整地迭代遍历Java对象组成的集合。自Java 1.2起,它在Java编程语言中可免费使用,并属于java.util包。

尽管Java迭代器是在Java 1.2中引入的,但它仍不是遍历Collection对象元素的最早可用工具。在Java编程语言中,最早的迭代器是先于Iterator的枚举器(Enumerator)。Java迭代器接口继承了在开始时用于遍历某些可访问集合(如ArrayLists)的枚举器迭代器。

Java迭代器也被称为Java的通用游标,因为它适用于Collection框架的所有类。Java迭代器还可以帮助进行读取和删除等操作。与枚举器迭代器接口相比,可以说Java迭代器中的方法名更加准确和简单易用。

Java迭代器的优点

Java迭代器由于其众多优点而变得非常流行。Java迭代器的优点如下:

  • 用户可以将这些迭代器应用于Collection框架的任何类。
  • 在Java迭代器中,可以同时使用读取和删除操作。
  • 如果用户使用for循环,不能更新(添加/删除)集合,而如果使用Java迭代器,可以简单地更新集合。
  • Java迭代器被认为是Collection API的通用游标。
  • Java迭代器中的方法名称非常简单,使用起来很简单。

Java迭代器的缺点

尽管有许多优点,但Java迭代器也有一些缺点。Java迭代器的缺点包括:

  • Java迭代器只能保留向前的迭代。换句话说,Java迭代器是单向迭代器。
  • Java迭代器不允许替换和添加新的元素。
  • 在CRUD操作中,Java迭代器不支持创建和更新等操作。
  • 与Spliterator相比,Java迭代器不支持以并行模式遍历元素,这意味着Java迭代器只支持顺序迭代。
  • 与Spliterator相比,Java迭代器不支持更可靠的执行以遍历大量数据。

如何使用Java迭代器?

当用户需要使用Java迭代器时,他们必须从他们希望遍历的对象集合中实例化迭代器接口。然后,接收到的迭代器会维护底层集合中组件的顺序,以确保用户遍历集合的每个元素。

如果用户在遍历迭代器所在的集合时修改了底层集合,迭代器通常会注意到并在用户尝试从迭代器获取下一个组件时抛出异常。

Java迭代器方法

下图完美地显示了Java迭代器接口的类图。它包含四个方法:

  • hasNext()
  • next()
  • remove()
  • forEachRemaining()

forEachRemaining() 方法是在Java 8中添加的。让我们详细讨论每个方法。

  • boolean hasNext():该方法不接受任何参数。如果迭代中还有更多的元素,则返回true。如果没有更多的元素,则返回false。 如果迭代中没有更多的元素,就不需要调用next()方法。简单地说,该方法用于确定是否应调用next()方法。
  • E next():它与hasNext()方法类似。它也不接受任何参数。它返回E,即遍历中的下一个元素。如果迭代或对象集合没有更多的元素可遍历,则会抛出NoSuchElementException。
  • default void remove():此方法也不需要任何参数。该方法没有返回类型。此方法的主要功能是删除迭代器遍历底层集合返回的最后一个元素。每次next()方法调用只能请求一次remove()方法。如果迭代器不支持remove操作,则会抛出UnSupportedOperationException。如果尚未调用next方法,则还会抛出IllegalStateException。
  • default void forEachRemaining(Consumer action):这是Java迭代器的唯一带有参数的方法。它接受操作作为参数。操作是要执行的操作。该方法没有返回类型。此方法对集合的所有剩余组件执行特定操作,直到所有组件被消耗或操作抛出异常。由操作引发的异常会传递给调用者。如果操作为null,则会抛出NullPointerException。

Java迭代器示例

现在是执行一个Java程序来说明Java迭代器接口的优点的时候了。下面的代码创建了一个城市名称的ArrayList。然后,我们使用ArrayList的iterator()方法初始化一个迭代器。然后,遍历列表以表示每个元素。

JavaIteratorExample.java

import java.io.*;
import java.util.*;

public class JavaIteratorExample {
  public static void main(String[] args) {
    ArrayList<String> cityNames = new ArrayList<String>();

    cityNames.add("Delhi");
    cityNames.add("Mumbai");
    cityNames.add("Kolkata");
    cityNames.add("Chandigarh");
    cityNames.add("Noida");

    // Iterator to iterate the cityNames
    Iterator<String> iterator = cityNames.iterator();

    System.out.println("CityNames elements:");

    while (iterator.hasNext())
      System.out.print(iterator.next() + " ");

    System.out.println();
  }
}

输出:

CityNames elements:
Delhi Mumbai Kolkata Chandigarh Noida

注意事项

  • Java迭代器是Java编程语言中的一个接口,它是在Java 1.2的Collection框架中添加的。它属于java.util包。
  • 它是用于遍历Collection对象的组件的一种Java游标。
  • Java迭代器用于逐个迭代遍历集合对象的组件。
  • Java迭代器也被称为Java的通用游标,因为它适用于Collection框架的所有类。
  • Java迭代器还支持读取和删除等操作。
  • 与Enumeration迭代器的方法名相比,Iterator类的方法名非常简单和易用。

标签: java, Java面试题, Java下载, java教程, java技术, Java学习, Java学习教程, Java语言, Java开发, Java入门教程, Java进阶教程, Java高级教程, Java笔试题, Java编程思想