java iterator 遇到 null 元素时,不会抛出异常,而是直接返回该 null 值。开发者需要在调用 next() 后自行判断返回值是否为 null,并在业务逻辑中处理空指针风险。通常的做法是在获取元素后立即进行非空检查,或者在迭代前过滤掉集合中的 null 项。

Iterator 遍历过程中如何处理 null 值
当使用 Iterator 遍历包含 null 元素的集合时,next() 方法会正常返回 null,而不会中断或报错。这意味着开发者必须显式地检查返回值,以防止后续操作触发 NullPointerException。例如,如果集合是 ArrayList 且允许 null,迭代器将如实返回这些 null 对象。

import java.util.ArrayList;
import java.util.Iterator;
public class Main {
public static void main(String[] args) {
ArrayList<string> list = new ArrayList();
list.add("A");
list.add(null);
list.add("B");
Iterator<string> it = list.iterator();
while (it.hasNext()) {
String item = it.next();
if (item == null) {
System.out.println("Found null element");
} else {
System.out.println(item.length());
}
}
}
}</string></string>
如何避免 Iterator 中的 null 元素干扰
为了避免在迭代过程中频繁处理 null,可以在构建集合时过滤掉 null 值,或者在迭代时使用 remove() 方法剔除它们。另一种策略是使用 Optional 包装返回值,但这需要改变数据结构的设计。最直接的方式是在迭代循环内部增加条件判断,跳过或特殊处理 null 项。

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class FilterNull {
public static void main(String[] args) {
List<string> list = new ArrayList();
list.add("A");
list.add(null);
list.add("B");
Iterator<string> it = list.iterator();
while (it.hasNext()) {
String item = it.next();
if (item == null) {
it.remove(); // 移除 null 元素
}
}
System.out.println(list); // 输出: [A, B]
}
}</string></string>
Iterator 移除 null 元素后的集合状态变化
在迭代过程中调用 remove() 移除 null 元素后,集合的大小会减少,且后续的 hasNext() 和 next() 行为会基于更新后的集合状态。这种操作是安全的,只要遵循迭代器的规范,即只能在 next() 之后调用 remove()。移除 null 后,剩余的 non-null 元素保持原有顺序,索引相应调整。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











