Java遍历HashSet最推荐用Iterator,安全通用且可避免ConcurrentModificationException;增强for循环本质相同但不能直接调用set.remove();需边遍历边删除时必须用iterator.remove();HashSet无序,顺序不固定。

Java 中遍历 HashSet 最常用且推荐的方式就是使用迭代器(Iterator),因为它安全、通用,还能在遍历时避免并发修改异常(ConcurrentModificationException)——只要不通过集合本身增删元素。
使用 Iterator 遍历 HashSet
调用 HashSet.iterator() 获取迭代器对象,再用 hasNext() 和 next() 循环访问每个元素:
// 示例代码
HashSet<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Cherry");
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
System.out.println(item);
}
增强 for 循环本质也是 Iterator
写法更简洁的 for-each 循环底层仍基于迭代器实现,语义等价、线程安全级别相同:
立即学习“Java免费学习笔记(深入)”;
for (String item : set) {
System.out.println(item);
}
它自动调用 iterator() 和 hasNext()/next(),但**不能在循环中直接调用 set.remove()**,否则会抛出 ConcurrentModificationException。
需要边遍历边删除?必须用 Iterator.remove()
如果要在遍历过程中删除某些元素,唯一安全的方式是调用 iterator.remove():
- 这是
Iterator接口定义的唯一允许的修改操作 - 它不会触发并发修改检查,因为迭代器自己维护了修改计数
- 不能多次连续调用
remove()(必须先调用一次next())
// 安全删除长度小于 5 的字符串
Iterator<String> iter = set.iterator();
while (iter.hasNext()) {
if (iter.next().length() < 5) {
iter.remove(); // ✅ 正确
}
}
注意:HashSet 无序,遍历顺序不固定
HashSet 基于哈希表实现,不保证插入顺序或任何特定顺序。每次运行结果可能不同:
- 想按插入顺序遍历?改用
LinkedHashSet - 想按自然顺序或自定义顺序?改用
TreeSet - 若需稳定顺序,不要依赖
HashSet的遍历结果


















