java如何求集合的交集并集

java如何求集合的交集并集

作者:Rhett Bai发布时间:2026-02-14阅读时长:0 分钟阅读次数:1

用户关注问题

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

我有两个集合,想找出它们之间的交集,Java中有哪些方法可以实现?

A

使用retainAll方法获取集合交集

在Java中,可以使用Collection接口的retainAll方法来求集合的交集。示例代码:

Set<String> set1 = new HashSet<>(Arrays.asList("a", "b", "c"));
Set<String> set2 = new HashSet<>(Arrays.asList("b", "c", "d"));

set1.retainAll(set2);
System.out.println(set1); // 输出:[b, c]

retainAll会修改调用集合,保留与另一个集合相同的元素。

Q
如何合并两个集合并且去重?

想在Java中实现两个集合的并集操作,并且保证结果中没有重复元素,该怎么做?

A

使用addAll方法实现集合的并集

Java中可以利用Set集合的特性进行并集操作,使用addAll方法将两个集合合并且自动去重。示例代码:

Set<String> set1 = new HashSet<>(Arrays.asList("a", "b", "c"));
Set<String> set2 = new HashSet<>(Arrays.asList("b", "c", "d"));

set1.addAll(set2);
System.out.println(set1); // 输出:[a, b, c, d]

addAll方法会把set2中所有元素加入set1,重复的元素只保留一个。

Q
Java如何在不修改原集合的情况下计算交集和并集?

如果不想改变原始集合,如何在Java中获得集合的交集和并集结果?

A

通过创建新集合实现不修改原集合的交并集操作

为了保护原集合不被修改,可以先复制集合,再在副本上调用retainAll或addAll方法。示例如下:

Set<String> set1 = new HashSet<>(Arrays.asList("a", "b", "c"));
Set<String> set2 = new HashSet<>(Arrays.asList("b", "c", "d"));

// 求交集
Set<String> intersection = new HashSet<>(set1);
intersection.retainAll(set2);
System.out.println(intersection); // [b, c]

// 求并集
Set<String> union = new HashSet<>(set1);
union.addAll(set2);
System.out.println(union); // [a, b, c, d]

这样可以得到交集和并集的结果,而不会影响到原始集合内容。