在Java开发中,集合的并集操作是非常常见的需求,指的是将多个集合中的所有元素合并,去除重复元素后得到新的集合。不同集合类型的并集实现方式存在差异,需要根据实际场景选择合适的方法。

基于Set集合实现并集
Set集合本身不允许存储重复元素,因此利用这个特性实现并集是最简单直接的方式。只需要将需要合并的多个集合元素全部添加到同一个Set中,就可以自动完成去重,得到并集结果。
以下是使用HashSet实现两个List并集的示例:
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class SetUnionDemo {
public static void main(String[] args) {
// 创建第一个List集合
List<String> list1 = new ArrayList<>();
list1.add("Java");
list1.add("Python");
list1.add("Go");
// 创建第二个List集合
List<String> list2 = new ArrayList<>();
list2.add("Python");
list2.add("C++");
list2.add("Rust");
// 创建HashSet,添加第一个集合的所有元素
Set<String> unionSet = new HashSet<>(list1);
// 添加第二个集合的所有元素,重复元素会被自动过滤
unionSet.addAll(list2);
// 输出并集结果
System.out.println("两个List的并集为:" + unionSet);
}
}如果需要合并多个集合,只需要依次调用addAll方法添加各个集合的元素即可,Set会自动处理重复元素。
基于List集合实现并集
如果需要保留并集结果中的顺序,或者后续需要允许重复元素存在,可以使用List来实现并集。不过List本身允许重复元素,需要手动去重,或者结合Set完成去重后再转回List。
以下是使用List实现并集并去重的示例:
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class ListUnionDemo {
public static void main(String[] args) {
List<String> list1 = new ArrayList<>();
list1.add("Java");
list1.add("Python");
list1.add("Go");
List<String> list2 = new ArrayList<>();
list2.add("Python");
list2.add("C++");
list2.add("Rust");
// 先合并两个List的所有元素
List<String> tempList = new ArrayList<>(list1);
tempList.addAll(list2);
// 利用Set去重后转回List,保留原有顺序可以改用LinkedHashSet
Set<String> tempSet = new HashSet<>(tempList);
List<String> unionList = new ArrayList<>(tempSet);
System.out.println("两个List的并集(去重后)为:" + unionList);
}
}如果希望保留元素的添加顺序,可以将HashSet替换为LinkedHashSet,这样去重后的元素顺序会和首次出现的顺序一致。
使用工具类实现并集
如果项目中已经引入了Apache Commons Collections或者Guava等工具库,也可以直接使用工具类提供的方法实现并集,代码会更加简洁。以Apache Commons Collections的CollectionUtils为例:
import org.apache.commons.collections4.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
public class UtilsUnionDemo {
public static void main(String[] args) {
List<String> list1 = new ArrayList<>();
list1.add("Java");
list1.add("Python");
List<String> list2 = new ArrayList<>();
list2.add("Python");
list2.add("C++");
// 直接使用union方法获取并集,返回的是Collection类型
List<String> unionResult = new ArrayList<>(CollectionUtils.union(list1, list2));
System.out.println("使用工具类得到的并集为:" + unionResult);
}
}不同实现方式的适用场景不同,如果是简单的并集需求,优先使用Set原生特性实现,不需要额外引入依赖;如果项目已经有相关工具库,使用工具类可以减少重复代码。
注意事项
- 如果集合中的元素是自定义对象,需要重写
equals和hashCode方法,否则Set无法正确判断元素是否重复,会导致去重失败。 - 合并大量元素时,需要考虑集合的初始容量,避免频繁扩容带来的性能损耗。
- 如果需要保留重复元素,不需要去重,直接合并多个集合到同一个List即可,不需要额外的去重操作。
Java集合并集SetListCollection修改时间:2026-06-03 15:54:04