利用了Java 8的Stream API,代码简洁且效率高
import java.util.stream.Collectors;
import java.util.List;
import java.util.HashSet;
import java.util.Set;
public class ListIntersection {
public static List<Long> findIntersection(List<Long> list1, List<Long> list2) {
Set<Long> set2 = new HashSet<>(list2);
return list1.stream()
.filter(set2::contains)
.collect(Collectors.toList());
}
public static void main(String[] args) {
List<Long> list1 = List.of(1L, 3L, 5L, 7L, 9L);
List<Long> list2 = List.of(3L, 6L, 9L, 12L);
List<Long> intersection = findIntersection(list1, list2);
System.out.println("交集结果: " + intersection);
}
}
步骤解释:
- 转换为集合:将第二个列表
list2
转换为一个Set
,以便快速查找元素是否存在。 - 流过滤:使用
stream()
方法将第一个列表转换为一个流,并使用filter()
方法筛选出在集合中包含的元素。 - 收集结果:通过
collect(Collectors.toList())
将筛选后的流收集到一个新的列表中,即为两个列表的交集。
这种方法的时间复杂度为 O(n + m),其中 n 和 m 分别是两个列表的长度,适合处理较大的数据集。