Java中HashSet求并集最直接方式是addAll(),修改原集合;若需保留原集合,则新建HashSet初始化后addAll;也可用Stream.concat配合collect实现,但性能略低。

Java 中 HashSet 求两个集合的并集,最直接的方式是用 addAll() 方法——它会把另一个集合的所有元素添加到当前集合中,自动去重,结果就是并集。
用 addAll() 修改原集合(最常用)
这是最简洁、高效的做法。注意:该操作会**修改调用方集合**(即原集合被改变)。
- 确保目标集合是可变的(HashSet 默认支持)
- 调用
set1.addAll(set2),执行后set1就变成两者的并集 - 无需手动去重,HashSet 自身保证唯一性
示例:
HashSet<String> set1 = new HashSet<>(Arrays.asList("a", "b"));
HashSet<String> set2 = new HashSet<>(Arrays.asList("b", "c"));
set1.addAll(set2); // set1 现在是 ["a", "b", "c"]
不修改原集合:创建新 HashSet 存并集
如果需要保留原始两个集合不变,就新建一个 HashSet,先构造再添加。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 用其中一个集合初始化新集合:
new HashSet<>(set1) - 再对新集合调用
addAll(set2) - 这样原始
set1和set2都未被改动
示例:
HashSet<String> union = new HashSet<>(set1); union.addAll(set2); // union 是并集,set1、set2 不变
用 Stream(Java 8+,函数式风格)
适合链式操作或需进一步处理的场景,但性能略低于直接 addAll(),且代码稍长。
- 合并两个流:
Stream.concat(set1.stream(), set2.stream()) - 收集为新 HashSet:
.collect(Collectors.toCollection(HashSet::new))
示例:
Set<String> union = Stream.concat(set1.stream(), set2.stream())
.collect(Collectors.toCollection(HashSet::new));
注意事项
- 元素必须正确重写
hashCode()和equals(),否则去重失效 - 如果集合含
null,HashSet 允许一个null,并集也只保留一个 -
addAll()返回boolean:只要至少添加了一个新元素就返回true,可用于判断是否有新元素加入

















