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);
}
</string></string>
增强 for 循环本质也是 Iterator
写法更简洁的 for-each 循环底层仍基于迭代器实现,语义等价、线程安全级别相同:
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() <h3>注意:HashSet 无序,遍历顺序不固定</h3>
<p><code>HashSet</code> 基于哈希表实现,不保证插入顺序或任何特定顺序。每次运行结果可能不同:</p>
<ul>
<li>想按插入顺序遍历?改用 <code>LinkedHashSet</code>
</li>
<li>想按自然顺序或自定义顺序?改用 <code>TreeSet</code>
</li>
<li>若需稳定顺序,不要依赖 <code>HashSet</code> 的遍历结果</li>
</ul></string>
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











