hashset遍历最推荐增强for循环;需删除元素时用iterator;java 8+推荐stream流式操作;普通for循环加get()不可行,因hashset无索引。

HashSet 遍历元素最常用、最推荐的方式是使用增强 for 循环(for-each),它简洁、安全、可读性强。
用增强 for 循环遍历
这是最直观的方式,适用于只需要读取元素的场景:
HashSet<string> set = new HashSet();
set.add("apple");
set.add("banana");
set.add("cherry");
for (String item : set) {
System.out.println(item);
}
</string>
注意:HashSet 不保证插入顺序,输出顺序是不确定的(底层基于哈希表,可能随容量变化而变化)。
用 Iterator 迭代器遍历
适合需要在遍历时删除元素的场景(避免 ConcurrentModificationException):
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 调用 set.iterator() 获取迭代器
- 用 hasNext() 判断是否还有元素
- 用 next() 获取当前元素
- 如需删除,必须用 iterator.remove()(不能直接调用 set.remove())
Iterator<string> it = set.iterator();
while (it.hasNext()) {
String item = it.next();
System.out.println(item);
if ("banana".equals(item)) {
it.remove(); // 安全删除
}
}
</string>
转成数组或流再遍历(Java 8+)
适合配合函数式操作,比如过滤、映射:
- 用 set.toArray() 转为 Object[](需强制类型转换)
- 更推荐用 set.stream():支持 filter、map、forEach 等链式操作
// 使用 Stream
set.stream()
.filter(s -> s.length() > 5)
.forEach(System.out::println);
// 转数组(不常用,仅作了解)
String[] arr = set.toArray(new String[0]);
for (String s : arr) {
System.out.println(s);
}
不推荐的方式:普通 for 循环 + size() + get()
HashSet 没有索引概念,**不支持通过下标访问元素**(没有 get(int index) 方法)。以下写法是错误的:
// ❌ 编译不通过!HashSet 没有 get() 方法 for (int i = 0; i <p>如果误以为它像 ArrayList,会直接编译失败。</p>
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










