java中求两个hashset并集最直接高效的方式是用addall()方法原地合并,会修改调用方集合;若需保留原集合,则先复制再合并;也可用stream.concat配合collect实现,但性能略低。

Java 中求两个 HashSet 的并集,最直接、高效的方式是使用 addAll() 方法 —— 将一个集合的所有元素添加到另一个集合中,原地完成并集操作。
用 addAll() 实现并集(推荐)
这是最常用、性能最好的方式。注意:该操作会**修改调用方集合**,即并集结果保存在调用 addAll() 的那个集合中。
示例:
HashSet<string> set1 = new HashSet(Arrays.asList("a", "b", "c"));
HashSet<string> set2 = new HashSet(Arrays.asList("b", "c", "d"));
set1.addAll(set2); // set1 现在包含 ["a", "b", "c", "d"](自动去重)
System.out.println(set1); // [a, b, c, d](顺序不保证)
</string></string>
- 无需额外创建集合,节省内存
- 时间复杂度接近 O(n),其中 n 是 set2 的大小
- 如果不想修改原集合,可先复制一份再调用
addAll()
不修改原集合:先复制再合并
若需保留原始两个集合不变,可创建新集合,用构造器或 new HashSet(...) 初始化后调用 addAll()。
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
示例:
HashSet<string> set1 = new HashSet(Arrays.asList("a", "b"));
HashSet<string> set2 = new HashSet(Arrays.asList("b", "c"));
HashSet<string> union = new HashSet(set1); // 复制 set1
union.addAll(set2); // 合并 set2
// set1 和 set2 均未改变
System.out.println(union); // [a, b, c]
</string></string></string>
使用 Java 8 Stream(适合函数式风格)
适用于需要链式处理或与其他流操作结合的场景,但性能略低于 addAll(),且代码稍冗长。
示例:
HashSet<string> set1 = new HashSet(Arrays.asList("x", "y"));
HashSet<string> set2 = new HashSet(Arrays.asList("y", "z"));
Set<string> union = Stream.concat(set1.stream(), set2.stream())
.collect(Collectors.toSet());
</string></string></string>
- 返回的是
Set接口类型,默认是HashSet(JDK 10+),但不保证具体实现类 - 如需明确返回
HashSet,可加Collectors.toCollection(HashSet::new)
注意事项
-
HashSet自动去重,重复元素只保留一份,天然支持并集语义 - 元素必须正确实现
equals()和hashCode(),否则并集可能出错 - 并集结果无序(
HashSet不保证迭代顺序),如需有序,请用TreeSet或后续排序
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










