java中如何求两个集合的交集和并集

java中如何求两个集合的交集和并集

作者:William Gu发布时间:2026-02-10阅读时长:0 分钟阅读次数:1

用户关注问题

Q
在Java中,如何找到两个集合共有的元素?

我有两个集合,想要快速找出它们共同包含的元素,该用什么方法或者API?

A

使用retainAll方法获取集合的交集

Java中可以利用Collection接口的retainAll方法来获得两个集合的交集。这个方法会保留调用集合中同时也存在于指定集合中的元素,从而得到交集。示例代码为:

Set<Integer> set1 = new HashSet<>(Arrays.asList(1, 2, 3, 4));
Set<Integer> set2 = new HashSet<>(Arrays.asList(3, 4, 5, 6));
set1.retainAll(set2);
System.out.println(set1); // 输出: [3, 4]
Q
怎样使用Java集合实现两个集合的合并?

我想要合并两个集合,使得结果集合中包含所有两个集合的元素。有没有简便的实现方法?

A

通过addAll方法实现集合的并集

Java集合框架提供了addAll方法,可以把一个集合的所有元素添加到另一个集合中,从而实现并集。示例如下:

Set<Integer> set1 = new HashSet<>(Arrays.asList(1, 2, 3));
Set<Integer> set2 = new HashSet<>(Arrays.asList(3, 4, 5));
set1.addAll(set2);
System.out.println(set1); // 输出: [1, 2, 3, 4, 5]
Q
是否可以在Java中同时获取两个集合的交集和并集?如何操作?

为了提高效率,我希望在程序中同时计算两个集合的交集和并集,有没有推荐的技巧?

A

通过复制集合并结合retainAll和addAll方法完成操作

计算交集和并集时,建议先复制集合,避免修改原始数据。可以复制一个集合用retainAll来得到交集,再复制原集合用addAll得到并集。示例代码:

Set<Integer> setA = new HashSet<>(Arrays.asList(1, 2, 3, 4));
Set<Integer> setB = new HashSet<>(Arrays.asList(3, 4, 5, 6));

Set<Integer> intersection = new HashSet<>(setA);
intersection.retainAll(setB);

Set<Integer> union = new HashSet<>(setA);
union.addAll(setB);

System.out.println("Intersection: " + intersection); // 输出交集
System.out.println("Union: " + union); // 输出并集