Java中遍历HashSet最常用增强for循环和Iterator:增强for最简洁但顺序不确定;Iterator支持安全删除;forEach适合函数式操作;转数组方式较少用。

Java 中遍历 HashSet 的元素有多种方式,最常用的是增强 for 循环和迭代器(Iterator),因为 HashSet 本身不保证顺序,也不支持通过索引访问。
使用增强 for 循环(推荐)
这是最简洁、可读性最好的方式,适用于大多数场景:
HashSet<String> set = new HashSet<>();
set.add("apple");
set.add("banana");
set.add("cherry");
for (String item : set) {
System.out.println(item);
}
注意:输出顺序不确定(例如可能是 banana → apple → cherry),这是 HashSet 的正常行为,底层基于哈希表实现,不维护插入或任何逻辑顺序。
使用 Iterator 遍历
适合需要在遍历中删除元素的场景(避免 ConcurrentModificationException):
立即学习“Java免费学习笔记(深入)”;
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
System.out.println(item);
// 如果要安全删除当前元素,用 iterator.remove()
// iterator.remove();
}
调用 iterator.remove() 是唯一安全删除正在遍历元素的方式,直接调用 set.remove() 会抛异常。
转成数组后遍历(较少用)
如果确实需要类似数组的操作,可以转成数组,但没必要为遍历专门这么做:
Object[] array = set.toArray();
for (Object obj : array) {
System.out.println((String) obj);
}
注意强转类型需谨慎;更安全写法是 set.toArray(new String[0]) 获取泛型数组。
使用 forEach() 方法(Java 8+)
函数式风格,适合配合 Lambda 表达式做简单处理:
set.forEach(System.out::println);
// 或自定义逻辑
set.forEach(item -> {
if (item.length() > 5) {
System.out.println("Long word: " + item);
}
});
该方法内部仍基于迭代器,不能在 lambda 中修改集合结构(如 remove)。


















