Java中安全使用泛型Iterator需声明具体类型如Iterator,避免原始类型;遍历时无需强转,删除必须用it.remove();不可变集合的迭代器不支持remove。

Java 中结合泛型安全使用 Iterator,核心是让编译器在编译期就校验类型,避免运行时 ClassCastException,同时规避手动强转。关键不在“能不能用”,而在于“怎么写才真正安全、简洁、不易出错”。
声明迭代器时明确泛型类型
不要用原始类型 Iterator,必须带上具体元素类型:
- ✅ 正确:
Iteratorit = list.iterator(); - ❌ 危险:
Iterator it = list.iterator();(返回Object,后续需强转)
这样 it.next() 直接返回 String,无需 (String) it.next(),既清爽又杜绝类型转换异常。
遍历时直接使用泛型变量,不依赖强转
配合增强 for 循环或迭代器遍历,泛型已确保类型一致:
for (String s : list) { /* s 就是 String,可直接调用 .length()、.trim() 等 */ }while (it.hasNext()) { String s = it.next(); /* 不再需要 (String) 强转 */ }
如果仍出现强转,说明泛型没写对,或集合本身是原始类型(如 ArrayList 而非 ArrayList),需回溯源头检查。
删除元素必须通过迭代器的 remove() 方法
泛型不解决并发修改问题,但配合迭代器删除能避开 ConcurrentModificationException:
- ✅ 安全:
if ("target".equals(s)) it.remove();(it是Iterator) - ❌ 危险:
list.remove(s);或list.remove(0);(在迭代中直接操作集合)
注意:remove() 只能删掉上一次 next() 返回的元素,且每调一次 next() 后最多调一次 remove()。
注意不可变集合的迭代器限制
像 List.of("A", "B") 创建的是不可变集合,其 iterator() 返回的迭代器虽支持 hasNext() 和 next(),但调用 remove() 会抛 UnsupportedOperationException:
- 若需删除,先转为可变集合:
new ArrayList(List.of(...)) - 若只是遍历,泛型 + 不可变集合反而是更安全的选择(无意外修改风险)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











