在嵌套循环中用Iterator遍历时,需用带标签的break、布尔标志位或封装方法返回来跳出外层;必须用Iterator.remove()安全删除元素,禁用集合直接remove。

在嵌套循环中使用 Iterator 时,不能直接用 break 跳出外层循环,因为 Iterator 本身不提供“跳出多层”的能力。关键在于:退出动作由循环结构控制,Iterator 只负责遍历;真正要解决的是「如何从内层迭代中干净地终止外层逻辑」。
用标签(label)配合 break 跳出指定循环
Java 支持带标签的 break,这是最直接、语义清晰的方式。给外层循环加标签,内层满足条件时用 break 标签名; 即可跳出到外层之外。
示例:
outer: for (Iterator<List<String>> outerIter = lists.iterator(); outerIter.hasNext(); ) {
List<String> innerList = outerIter.next();
for (Iterator<String> innerIter = innerList.iterator(); innerIter.hasNext(); ) {
String item = innerIter.next();
if ("target".equals(item)) {
System.out.println("找到目标,退出所有循环");
break outer; // 直接跳出 outer 循环
}
}
}
用布尔标志位控制外层循环结束
适用于逻辑较复杂、需在多个位置判断退出条件的场景。定义一个 boolean shouldStop = false,内层检测到条件后设为 true,外层每次迭代前检查它。
立即学习“Java免费学习笔记(深入)”;
示例:
boolean shouldStop = false;
for (Iterator<List<String>> outerIter = lists.iterator(); outerIter.hasNext() && !shouldStop; ) {
List<String> innerList = outerIter.next();
for (Iterator<String> innerIter = innerList.iterator(); innerIter.hasNext() && !shouldStop; ) {
String item = innerIter.next();
if ("target".equals(item)) {
System.out.println("触发退出");
shouldStop = true;
}
}
}
把嵌套逻辑封装成方法,用 return 提前返回
更推荐的写法——将双层迭代封装为一个 void 或 boolean 方法,找到目标后直接 return,天然结束所有嵌套层级。
示例:
private boolean findAndExit(List<List<String>> lists, String target) {
for (Iterator<List<String>> outerIter = lists.iterator(); outerIter.hasNext(); ) {
List<String> innerList = outerIter.next();
for (Iterator<String> innerIter = innerList.iterator(); innerIter.hasNext(); ) {
String item = innerIter.next();
if (target.equals(item)) {
System.out.println("已找到:" + item);
return true; // 立即退出整个方法
}
}
}
return false;
}
// 调用
findAndExit(data, "target");
避免在迭代中修改集合(ConcurrentModificationException)
如果退出前还需删除当前元素,不能直接调用集合的 remove(),必须用 Iterator.remove()。且注意:一旦调用了 iterator.remove(),该 Iterator 实例后续仍可继续使用(只要没抛异常),但其他并发修改会触发异常。
- ✅ 正确:用
innerIter.remove()删除当前遍历到的元素 - ❌ 错误:在
for (String s : list)增强 for 中调用list.remove(s) - ⚠️ 注意:
outerIter.remove()仅删除外层集合中的当前子列表,不影响内层迭代器状态


















