跳到主要内容

Java迭代器

介绍

在Java中,迭代器(Iterator) 是一种用于遍历集合(如 ListSet 等)中元素的工具。它提供了一种统一的方式来访问集合中的元素,而不需要了解集合的内部结构。迭代器的主要作用是帮助我们在不暴露集合底层实现的情况下,逐个访问集合中的元素。

迭代器是Java集合框架的一部分,几乎所有集合类都实现了 Iterable 接口,这意味着它们都可以通过迭代器进行遍历。

迭代器的基本用法

获取迭代器

要使用迭代器,首先需要从集合中获取一个迭代器对象。可以通过调用集合的 iterator() 方法来获取迭代器。

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

public class IteratorExample {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");

// 获取迭代器
Iterator<String> iterator = list.iterator();
}
}

遍历集合

获取迭代器后,可以使用 hasNext() 方法检查是否还有更多元素,并使用 next() 方法获取下一个元素。

java
while (iterator.hasNext()) {
String fruit = iterator.next();
System.out.println(fruit);
}

输出:

Apple
Banana
Cherry

删除元素

迭代器还提供了 remove() 方法,用于删除当前迭代的元素。需要注意的是,remove() 方法只能在调用 next() 方法之后调用,否则会抛出 IllegalStateException 异常。

java
while (iterator.hasNext()) {
String fruit = iterator.next();
if (fruit.equals("Banana")) {
iterator.remove(); // 删除 "Banana"
}
}

System.out.println(list);

输出:

[Apple, Cherry]
备注

remove() 方法会直接修改原始集合,因此在遍历时删除元素需要谨慎操作。

迭代器的实际应用场景

遍历集合

迭代器最常见的用途是遍历集合中的元素。与传统的 for 循环相比,迭代器提供了一种更通用的遍历方式,适用于所有实现了 Iterable 接口的集合类。

java
import java.util.HashSet;
import java.util.Iterator;

public class IteratorExample2 {
public static void main(String[] args) {
HashSet<Integer> set = new HashSet<>();
set.add(10);
set.add(20);
set.add(30);

Iterator<Integer> iterator = set.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}

输出:

10
20
30

并发修改检测

迭代器还可以用于检测集合在遍历过程中是否被修改。如果在使用迭代器遍历集合时,集合被其他线程修改,迭代器会抛出 ConcurrentModificationException 异常。

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

public class ConcurrentModificationExample {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");

Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String element = iterator.next();
if (element.equals("B")) {
list.remove("B"); // 这会抛出 ConcurrentModificationException
}
}
}
}
警告

在遍历集合时,尽量避免直接修改集合,否则可能会导致 ConcurrentModificationException 异常。

总结

Java迭代器是一种强大的工具,它提供了一种统一的方式来遍历集合中的元素。通过迭代器,我们可以轻松地访问集合中的每个元素,并在必要时删除元素。迭代器还帮助我们检测并发修改,确保集合在遍历过程中的一致性。

对于初学者来说,掌握迭代器的基本用法是非常重要的,因为它是Java集合框架中不可或缺的一部分。

附加资源与练习

练习

  1. 创建一个 ArrayList,添加一些元素,并使用迭代器遍历并打印所有元素。
  2. 尝试在遍历过程中使用 remove() 方法删除特定元素,并观察集合的变化。
  3. 编写一个程序,使用迭代器遍历 HashSet,并尝试在遍历过程中修改集合,观察是否会抛出 ConcurrentModificationException

进一步学习