JavaSet遍历
时间: 2025-05-15 15:10:44 浏览: 18
### Java 中 Set 的遍历方法
Java 提供了多种方式来遍历 `Set` 集合,以下是几种常见的方式及其对应的示例代码。
#### 1. 使用增强型 for 循环
增强型 for 循环是一种简洁的方式来遍历集合中的元素。这种方式适用于不需要修改集合的情况下。
```java
import java.util.HashSet;
import java.util.Set;
public class ForEachExample {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Orange");
for (String item : set) {
System.out.println(item);
}
}
}
```
这种方法简单易懂,但在需要删除元素时会抛出异常[^4]。
---
#### 2. 使用迭代器(Iterator)
当需要在遍历时安全地移除元素时,推荐使用 `Iterator`。通过调用 `iterator()` 方法获取迭代器实例,并利用其 `remove()` 方法实现安全删除操作。
```java
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class IteratorExample {
public static void main(String[] args) {
Set<Integer> set = new HashSet<>();
set.add(10);
set.add(20);
set.add(30);
Iterator<Integer> iterator = set.iterator();
while (iterator.hasNext()) {
Integer number = iterator.next();
if (number % 2 == 0) {
iterator.remove(); // 安全删除偶数
}
}
System.out.println(set); // 输出剩余奇数
}
}
```
此方法可以有效避免并发修改异常(ConcurrentModificationException),因为它是唯一允许在遍历过程中修改集合的机制[^2]。
---
#### 3. 使用 Lambda 表达式和 forEach 方法
自 Java 8 起引入了流式 API 和 Lambda 表达式,可以通过 `forEach` 方法配合 Lambda 实现更优雅的遍历逻辑。
```java
import java.util.HashSet;
import java.util.Set;
public class LambdaForEachExample {
public static void main(String[] args) {
Set<Double> set = new HashSet<>();
set.add(1.1);
set.add(2.2);
set.add(3.3);
set.forEach(item -> System.out.println(item * 2)); // 对每个元素执行特定操作
}
}
```
这种写法不仅简化了语法结构,还增强了可读性和灵活性[^5]。
---
#### 4. 使用 Stream 流处理
同样基于 Java 8 及以上版本的功能支持,Stream 接口提供了强大的数据处理能力,适合复杂查询需求下的集合遍历。
```java
import java.util.HashSet;
import java.util.Set;
public class StreamExample {
public static void main(String[] args) {
Set<Character> set = new HashSet<>();
set.add('A');
set.add('B');
set.add('C');
set.stream()
.filter(c -> c != 'B') // 过滤掉指定条件的数据项
.map(Character::toLowerCase) // 将字符转换成小写字母形式
.forEach(System.out::println); // 打印最终结果列表
}
}
```
上述例子展示了如何结合过滤、映射等功能完成一系列连续变换后再逐一访问目标成员。
---
#### 注意事项
如果尝试直接在 foreach 或传统索引控制语句内部调用 add/remove 函数,则可能触发非法状态错误或者未定义行为,这是因为底层实现了 fail-fast 检测策略所致[^3]。
阅读全文
相关推荐


















