java中遍历set集合需用iterator:调用set.iterator()获取迭代器,通过hasnext()和next()循环访问;删除元素须用it.remove()而非set.remove(),且仅可在next()后调用;增强for循环本质是iterator的语法糖。

Java 中用 Iterator 遍历 Set 集合,核心是调用 set.iterator() 获取迭代器,再通过 hasNext() 和 next() 循环访问元素。
获取 Iterator 对象
Set 接口继承自 Collection,所有实现类(如 HashSet、TreeSet、LinkedHashSet)都支持 iterator() 方法:
Iterator<string> it = set.iterator();</string>- 返回的迭代器顺序取决于具体实现:
HashSet无序,TreeSet按自然顺序或比较器排序,LinkedHashSet按插入顺序
安全遍历元素
使用 while 或 for 循环配合 hasNext() 和 next():
while (it.hasNext()) { String item = it.next(); System.out.println(item); }- 每次调用
next()前必须确保hasNext()返回true,否则抛NoSuchElementException - 不建议在遍历时直接调用
set.remove(),会引发ConcurrentModificationException
边遍历边删除元素
若需删除当前元素,必须使用迭代器自身的 remove() 方法:
while (it.hasNext()) { String s = it.next(); if (s.startsWith("A")) it.remove(); }-
it.remove()只能紧跟一次next()调用后使用,否则抛IllegalStateException - 这是唯一线程安全的“遍历中删除”方式(单线程下)
增强 for 循环的本质
平时写的 for (String s : set) 本质上就是编译器自动展开为 Iterator 遍历:
- 底层仍调用
set.iterator(),并隐式处理hasNext()和next() - 但无法在增强 for 中调用
remove(),如需删除仍得显式用Iterator
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











