在 Java 中,有多种方法可以计算两个集合的交集。我将为您介绍以下几种常见的实现方式,以及每种方式的步骤流程和示例代码。
假设我们有两个集合: set1
和 set2
,它们的类型都是 Set<T>
,其中 T
是集合中元素的类型。
这是 Java 集合框架提供的最简单的方法之一,可以直接在一个集合上调用 retainAll()
方法,传递另一个集合作为参数,以获取两者的交集。
步骤流程:
调用 set1.retainAll(set2) 方法,将会修改 set1,使其只保留和 set2 的交集部分。
示例代码:
import java.util.HashSet;
import java.util.Set;
public class Main {
public static void main(String[] args) {
Set<Integer> set1 = new HashSet<>();
Set<Integer> set2 = new HashSet<>();
set1.add(1);
set1.add(2);
set1.add(3);
set2.add(3);
set2.add(4);
set2.add(5);
set1.retainAll(set2);
System.out.println("Intersection: " + set1); // 输出:Intersection: [3]
}
}
Java 8 引入了 Stream API,使集合操作更加灵活。可以通过将两个集合转换为流,然后使用 filter()
和 collect()
方法来获取交集。
步骤流程:
filter()
方法保留属于第二个集合的元素。collect()
方法将过滤后的结果收集回一个新的集合。示例代码:
import java.util.HashSet;
import java.util.Set;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
Set<Integer> set1 = new HashSet<>();
Set<Integer> set2 = new HashSet<>();
set1.add(1);
set1.add(2);
set1.add(3);
set2.add(3);
set2.add(4);
set2.add(5);
Set<Integer> intersection = set1.stream()
.filter(set2::contains)
.collect(Collectors.toSet());
System.out.println("Intersection: " + intersection); // 输出:Intersection: [3]
}
}
Apache Commons Collections 库提供了 CollectionUtils
类,其中有一个 intersection()
方法可以用来计算两个集合的交集。
Maven 依赖坐标:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.4</version>
</dependency>
Gradle 依赖坐标:
implementation 'org.apache.commons:commons-collections4:4.4'
步骤流程:
CollectionUtils
类。CollectionUtils.intersection(set1, set2)
方法,该方法会返回一个新的集合,包含两个集合的交集。示例代码:
import org.apache.commons.collections4.CollectionUtils;
import java.util.HashSet;
import java.util.Set;
public class Main {
public static void main(String[] args) {
Set<Integer> set1 = new HashSet<>();
Set<Integer> set2 = new HashSet<>();
set1.add(1);
set1.add(2);
set1.add(3);
set2.add(3);
set2.add(4);
set2.add(5);
Set<Integer> intersection = CollectionUtils.intersection(set1, set2);
System.out.println("Intersection: " + intersection); // 输出:Intersection: [3]
}
}
这些是在 Java 中计算两个集合交集的几种常见方式。您可以根据项目需求选择适合的方法。