java中遍历hashset需用iterator,调用set.iterator()获取fail-fast迭代器,通过hasnext()和next()循环访问;遍历时删除必须用it.remove(),不可调用set.remove(),for-each是语法糖但不支持安全删除。

Java 中用 Iterator 遍历 HashSet 很简单,核心是调用 set.iterator() 获取迭代器,再用 hasNext() 和 next() 循环访问元素。
获取 Iterator 并遍历元素
HashSet 实现了 Iterable 接口,所以可以直接调用 iterator() 方法。返回的 Iterator 是**fail-fast** 的——如果在遍历过程中有其他线程或代码修改了集合结构(如添加、删除元素),会立即抛出 ConcurrentModificationException。
- 先调用
set.iterator()得到迭代器对象 - 用
it.hasNext()判断是否还有下一个元素 - 用
it.next()获取当前元素并移动指针
标准 while 循环写法
这是最直接、最体现迭代器本质的方式:
<font color="#888"><pre class="brush:php;toolbar:false;">HashSet<string> set = new HashSet();
set.add("apple");
set.add("banana");
set.add("cherry");
<p>Iterator<string> it = set.iterator();
while (it.hasNext()) {
String item = it.next();
System.out.println(item);
}</string></p></string>
注意:不能在循环中直接调用 set.remove(),否则会触发并发修改异常;如需边遍历边删除,必须使用 it.remove()。
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
用 for-each 循环(底层仍是 Iterator)
for-each 是语法糖,编译后实际也调用 iterator() 和 hasNext()/next():
<font color="#888"><pre class="brush:php;toolbar:false;">for (String item : set) {
System.out.println(item);
}
它更简洁,但无法在遍历时安全删除元素(没有暴露 Iterator 引用)。若需删除,仍得回到显式 Iterator 写法。
遍历时安全删除元素
唯一推荐的遍历中删除方式是调用 Iterator 自带的 remove() 方法:
- 必须在调用
next()之后、下一次next()之前调用 - 每次
remove()只能删掉上一次next()返回的元素 - 不能连续调用两次
remove(),否则抛IllegalStateException
<font color="#888"><pre class="brush:php;toolbar:false;">Iterator<string> it = set.iterator();
while (it.hasNext()) {
String item = it.next();
if ("banana".equals(item)) {
it.remove(); // ✅ 安全删除
}
}</string>Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










