java合并多个集合并去重的核心是利用集合自动去重特性:用hashset实现无序合并,linkedhashset保持插入顺序,stream.distinct()处理流式数据,自定义对象需重写equals和hashcode。

Java 中合并多个集合并去重,核心思路是利用集合的自动去重特性,选择合适的集合类型和合并方式。
使用 HashSet 合并多个 Set
如果原始数据已经是 Set(如 HashSet、TreeSet),最直接的方式是创建一个新的 HashSet,然后调用 addAll() 依次添加:
- 新建一个空的
HashSet - 对每个源集合调用
addAll() - 重复元素会被自动忽略
示例:
Set<string> set1 = new HashSet(Arrays.asList("a", "b"));
Set<string> set2 = new HashSet(Arrays.asList("b", "c"));
Set<string> set3 = new HashSet(Arrays.asList("c", "d"));
Set<string> merged = new HashSet();
merged.addAll(set1);
merged.addAll(set2);
merged.addAll(set3);
// 结果:[a, b, c, d](顺序不保证)</string></string></string></string>
合并 List 或数组并去重
若原始数据是 List 或普通数组,可先转为流再用 distinct(),或直接构造 HashSet:
-
Stream.concat()链接多个流,再distinct()+collect(Collectors.toSet()) - 更简洁:把所有元素收集到一个列表,再用
new HashSet(list) - 注意:
HashSet不保证插入顺序;如需有序,用LinkedHashSet
示例(流式):
List<string> list1 = Arrays.asList("x", "y");
List<string> list2 = Arrays.asList("y", "z");
Set<string> merged = Stream.concat(list1.stream(), list2.stream())
.distinct()
.collect(Collectors.toSet());</string></string></string>
保持插入顺序的合并
如果需要保留首次出现元素的顺序(比如按 list1 → list2 → list3 的顺序),推荐用 LinkedHashSet:
- 它继承
HashSet的去重能力,同时维护插入顺序 - 按顺序调用
addAll()即可实现“先到先得”去重 - 适用于合并多个有序集合且希望结果也有序的场景
示例:
Set<string> orderedMerged = new LinkedHashSet(); orderedMerged.addAll(list1); orderedMerged.addAll(list2); orderedMerged.addAll(list3); // 重复项不会打乱已有顺序</string>
处理自定义对象去重
合并含自定义对象的集合时,必须确保对象正确重写了 equals() 和 hashCode() 方法,否则 HashSet 无法识别逻辑上的重复:
- 仅靠字段值判断相等性,不能依赖默认的内存地址比较
- IDE(如 IntelliJ)可一键生成这两个方法
- 若用
TreeSet,还需实现Comparable或传入Comparator
例如,对 User 对象按 id 去重,就要在 User 类中基于 id 实现 equals 和 hashCode。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











