小工具知识网

当前位置: 首页 > 行业知识 > Java List集合取交集的五种方式

行业知识

Java List集合取交集的五种方式

2026-10-25 13:16:43 来源:互联网转载

在Java中,List 集合是用于存储一系列对象的数据结构。当我们要获取两个 List 集合的交集时,有多种方法可以实现。下面将介绍几种常见的方式。

()

1. 使用Java 8的Stream API

Java 8引入了Stream API,它提供了一种声明式的方式来处理数据。

import java.util.Arrays;  import java.util.List;  import java.util.stream.Collectors;    public class ListIntersection {      public static void main(String[] args) {          List list1 = Arrays.asList(1, 2, 3, 4, 5);          List list2 = Arrays.asList(4, 5, 6, 7, 8);            List intersection = list1.stream()                  .filter(list2::contains)                  .collect(Collectors.toList());            System.out.println("Intersection: " + intersection);      }  }

这段代码首先创建了两个 List 对象 list1 和 list2。然后,通过 list1.stream() 获取 list1 的Stream对象,并使用 filter 方法筛选出同时存在于 list2 中的元素。最后,使用 collect 方法将结果转换回 List 对象。

()

2. 使用Java的retainAll方法

retainAll 方法是 Collection 接口的一部分,它可以用来保留在指定集合中也存在的元素。不过,retainAll 方法会直接修改调用它的集合,因此在使用前需要创建一个副本。

import java.util.ArrayList;  import java.util.Arrays;  import java.util.List;    public class ListIntersection {      public static void main(String[] args) {          List list1 = new ArrayList(Arrays.asList(1, 2, 3, 4, 5));          List list2 = Arrays.asList(4, 5, 6, 7, 8);            List intersection = new ArrayList(list1);          intersection.retainAll(list2);            System.out.println("Intersection: " + intersection);      }  }

这段代码创建了两个 List 对象 list1 和 list2,然后将 list1 的一个副本赋值给 intersection。接着,调用 retainAll 方法来保留 intersection 中也存在于 list2 中的元素。


3. 使用Apache Commons Collections库

如果你使用的是Apache Commons Collections库,那么可以利用 CollectionUtils 类提供的 intersection 方法来更简单地求取交集。

import org.apache.commons.collections4.CollectionUtils;  import org.apache.commons.collections4.ListUtils;    import java.util.Arrays;  import java.util.List;    public class ListIntersection {      public static void main(String[] args) {          List list1 = Arrays.asList(1, 2, 3, 4, 5);          List list2 = Arrays.asList(4, 5, 6, 7, 8);            List intersection = (List) CollectionUtils.intersection(list1, list2);            System.out.println("Intersection: " + intersection);      }  }

这段代码首先引入了Apache Commons Collections库的相关类,然后利用 CollectionUtils.intersection 方法来直接求取两个 List 的交集。注意这里需要对返回的集合进行类型转换。


4.使用Java 8的并行流(Parallel Streams)

如果说你的数据量很大,或者你的机器有多个处理器核心,你可以考虑使用并行流来加速交集的计算。 

List list1 = Arrays.asList(1, 2, 3, 4, 5);List list2 = Arrays.asList(4, 5, 6, 7, 8);Set set2 = new HashSet(list2); // 使用HashSet提高查找效率List intersection = list1.parallelStream()    .filter(set2::contains)    .collect(Collectors.toList());

注意:大数据量下,会比较适合使用并行流


5.使用传统的for循环遍历

import java.util.ArrayList;import java.util.Arrays;import java.util.HashSet;import java.util.List;import java.util.Set;public class ListIntersection {    public static void main(String[] args) {        List list1 = Arrays.asList(1, 2, 3, 4, 5);        List list2 = Arrays.asList(4, 5, 6, 7, 8);        Set set1 = new HashSet(list1);        List intersection = new ArrayList();        for (Integer num : list2) {            if (set1.contains(num)) {                intersection.add(num);            }        }        System.out.println("交集:" + intersection);    }}

至于这里为什么这么写,小伙伴们可以去研究下。。。。。(卖个关子)


总结

上一篇:k1服务器怎么安装?

下一篇:Win10蓝屏重启困扰大解析!快速解决你的电脑问题!