HashSet遍历有四种方式:①增强for循环(语法简洁,底层用Iterator);②Iterator显式遍历(支持安全删除);③转数组遍历(不推荐,内存开销大);④forEach方法(Java 8+,函数式风格)。所有方式均不保证顺序。

HashSet 遍历元素有多种方式,最常用的是增强 for 循环和迭代器(Iterator),因为 HashSet 本身不保证顺序,所有遍历方式得到的元素顺序都不固定。
使用增强 for 循环
语法简洁,适合大多数场景,底层自动调用 Iterator:
<font size="2">HashSet<String> set = new HashSet<>();
set.add("apple");
set.add("banana");
set.add("cherry");
for (String item : set) {
System.out.println(item);
}</font>
使用 Iterator 显式遍历
适合需要在遍历时删除元素的场景(必须用 iterator.remove(),不能直接调用 set.remove()):
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 调用 set.iterator() 获取迭代器
- 用 hasNext() 判断是否有下一个元素
- 用 next() 获取当前元素
<font size="2">Iterator<String> it = set.iterator();
while (it.hasNext()) {
String item = it.next();
System.out.println(item);
// 如果要删除当前元素,写:it.remove();
}</font>
转换为数组后遍历(不推荐常规使用)
适用于需要随机访问或配合旧代码的情况,但会额外创建数组对象,增加内存开销:
<font size="2">String[] arr = set.toArray(new String[0]);
for (String item : arr) {
System.out.println(item);
}</font>
使用 forEach 方法(Java 8+)
函数式风格,代码更紧凑,适合简单操作:
<font size="2">set.forEach(System.out::println);
// 或带逻辑的 lambda
set.forEach(item -> {
if (item.length() > 5) {
System.out.println("长字符串: " + item);
}
});</font>

















