Java 遍历 Set 有多种方式,如下示例所示。
一、Iterator 迭代器遍历
package com.example.demo.test;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class Test {
public static void main(String[] args) {
Set<Integer> set = new HashSet<>();
// 给 set 赋值,造测试数据
for (int i = 0; i < 10; i++) {
set.add(i);
}
// 迭代器遍历
Iterator<Integer> it = set.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
}
二、for 循环遍历
package com.example.demo.test;
import java.util.HashSet;
import java.util.Set;
public class Test {
public static void main(String[] args) {
Set<Integer> set = new HashSet<>();
// 给 set 赋值,造测试数据
for (int i = 0; i < 10; i++) {
set.add(i);
}
// for 循环遍历
for (Integer integer : set) {
System.out.println(integer);
}
}
}
三、如何遍历删除 Set 集合中的元素?
使用上述方法 2 中的 for 循环,一边遍历一边删除元素时,会报如下异常:
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextNode(HashMap.java:1437)
at java.util.HashMap$KeyIterator.next(HashMap.java:1461)
at com.example.demo.test.CanVisitAllRooms.main(CanVisitAllRooms.java:42)
正确的做法是使用迭代器遍历删除元素,代码示例如下所示。
public static void main(String[] args) {
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(3);
// 迭代器遍历
Iterator<Integer> it = set.iterator();
while (it.hasNext()) {
System.out.println(it.next());
it.remove();
}
System.out.println(set.size());
}
测试结果输出如下所示,元素可正常遍历并删除。
1
2
3
0