java集合进阶 迭代器


迭代器是 Java 集合框架中的一种重要工具,用于遍历集合中的元素。它提供了一种统一的方式来访问不同类型的集合,无需暴露底层集合的实现细节。使用迭代器,可以按顺序访问集合中的每个元素,而无需了解集合内部的结构。

在 Java 中,所有实现了 java.util.Iterator 接口的类都可以被称为迭代器。Iterator 接口定义了几个常用的方法:

  • boolean hasNext(): 判断集合中是否还有下一个元素。
  • E next(): 返回集合中的下一个元素,并将迭代器的指针移动到下一个位置。
  • void remove(): 从集合中删除迭代器最后访问的元素。这个方法是可选的,不是所有的迭代器都支持该操作。

使用迭代器可以遍历集合,示例代码如下:

List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Orange");

Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    String element = iterator.next();
    System.out.println(element);
}

上述代码创建了一个包含三个字符串的列表,并使用迭代器进行遍历。hasNext() 方法判断是否还有下一个元素,next() 方法返回下一个元素,并将迭代器的指针向前移动。

需要注意的是,一旦迭代器开始使用,应该只通过迭代器进行集合的修改,而不是直接操作集合本身。否则,可能会导致遍历过程中的并发修改异常。

除了使用 Iterator 接口,还可以使用增强的 for 循环(foreach)语法来遍历集合。例如:

List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Orange");

for (String element : list) {
    System.out.println(element);
}

使用增强的 for 循环可以简化代码,但它只能用于遍历集合,无法进行集合的修改操作。

迭代器是 Java 集合框架中非常有用的工具,可以帮助我们遍历和操作集合中的元素,提供了更灵活的方式来处理集合数据。

当使用迭代器遍历集合时,需要注意以下几点:

  1. 迭代器的顺序性:迭代器会按照集合中元素的顺序进行遍历,确保每个元素都被访问到。因此,使用迭代器遍历集合可以保证元素的顺序性。
  2. 迭代器的一次性:迭代器是一次性的,只能向前移动,不支持回退或重新遍历。一旦遍历到最后一个元素,再次调用 next() 方法将抛出 NoSuchElementException 异常。如果需要重新遍历集合,需要重新获取迭代器。
  3. 删除元素:迭代器的 remove() 方法可以删除迭代器最后访问的元素。该方法将元素从集合中移除,并且不会抛出并发修改异常。但是,该方法只能在调用 next() 方法之后才能被调用,否则会抛出 IllegalStateException 异常。

下面是一个使用迭代器删除集合中满足特定条件的元素的示例:

List<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(4);
numbers.add(5);

Iterator<Integer> iterator = numbers.iterator();
while (iterator.hasNext()) {
    int number = iterator.next();
    if (number % 2 == 0) {
        iterator.remove(); // 删除偶数元素
    }
}

System.out.println(numbers); // 输出:[1, 3, 5]

在上述示例中,使用迭代器遍历列表 numbers,并通过判断元素是否为偶数来删除满足条件的元素。

需要注意的是,迭代器是通过集合的 iterator() 方法获取的,每次调用该方法都会返回一个新的迭代器。如果在遍历过程中直接修改了集合(例如使用 list.remove() 方法),可能会导致并发修改异常 ConcurrentModificationException。为了避免这种情况,应该使用迭代器的 remove() 方法来删除元素。

总结来说,迭代器是一种方便而强大的工具,用于遍历和操作集合中的元素。它提供了顺序访问集合元素的能力,并支持删除操作,可以在遍历过程中安全地修改集合。


原文链接:codingdict.net