Java 基础教程

Java 面向对象

Java 高级教程

Java 笔记

Java FAQ

java两个list求交集


在 Java 中,求两个列表的交集可以使用多种方法实现。下面我将为您介绍三种常见的实现方式,包括使用循环、使用 Java 8 Stream 和使用 Google Guava 库。对于每种方式,我将提供详细的步骤流程以及示例代码,并为 Guava 方法提供相应的 Maven 和 Gradle 依赖坐标。

方法一:使用循环

这是一种最基本的方法,适用于较小的列表。基本思路是对其中一个列表的每个元素,检查是否存在于另一个列表中。

import java.util.ArrayList;
import java.util.List;

public class ListIntersection {
    public static <T> List<T> getIntersection(List<T> list1, List<T> list2) {
        List<T> intersection = new ArrayList<>();
        for (T element : list1) {
            if (list2.contains(element)) {
                intersection.add(element);
            }
        }
        return intersection;
    }

    public static void main(String[] args) {
        List<Integer> list1 = new ArrayList<>(List.of(1, 2, 3, 4, 5));
        List<Integer> list2 = new ArrayList<>(List.of(3, 4, 5, 6, 7));

        List<Integer> intersection = getIntersection(list1, list2);
        System.out.println(intersection); // Output: [3, 4, 5]
    }
}

方法二:使用 Java 8 Stream

Java 8 引入了 Stream API,使集合操作更加简洁和表达性强。通过将列表转换为流,可以很容易地求交集。

import java.util.List;
import java.util.stream.Collectors;

public class ListIntersection {
    public static <T> List<T> getIntersection(List<T> list1, List<T> list2) {
        return list1.stream()
                .filter(list2::contains)
                .collect(Collectors.toList());
    }

    public static void main(String[] args) {
        List<Integer> list1 = List.of(1, 2, 3, 4, 5);
        List<Integer> list2 = List.of(3, 4, 5, 6, 7);

        List<Integer> intersection = getIntersection(list1, list2);
        System.out.println(intersection); // Output: [3, 4, 5]
    }
}

方法三:使用 Google Guava

Google Guava 是一个常用的 Java 库,提供了许多方便的集合操作方法,包括求交集。

首先,您需要在项目中添加 Guava 依赖:

Maven 依赖坐标:

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>31.0.1-jre</version>
</dependency>

Gradle 依赖坐标:

implementation 'com.google.guava:guava:31.0.1-jre'

然后,可以使用 Guava 的 Sets.intersection() 方法来求交集。

import com.google.common.collect.Sets;

import java.util.List;
import java.util.Set;

public class ListIntersection {
    public static <T> Set<T> getIntersection(List<T> list1, List<T> list2) {
        Set<T> set1 = Sets.newHashSet(list1);
        Set<T> set2 = Sets.newHashSet(list2);
        return Sets.intersection(set1, set2);
    }

    public static void main(String[] args) {
        List<Integer> list1 = List.of(1, 2, 3, 4, 5);
        List<Integer> list2 = List.of(3, 4, 5, 6, 7);

        Set<Integer> intersection = getIntersection(list1, list2);
        System.out.println(intersection); // Output: [3, 4, 5]
    }
}

无论您选择哪种方法,都可以根据您的项目需求和数据规模来进行选择。循环方法适用于小型列表,Stream API 简洁易读,而 Guava 提供了更多集合操作的便捷方法。

###方法一:使用循环遍历这是一种基本的方法,通过循环遍历一个列表,然后在另一个列表中查找是否存在相同的元素,从而找到交集。示例代码:### ...
假设我们有两个集合:`set1`和`set2`,它们的类型都是`Set<T>`,其中`T`是集合中元素的类型。###方法一:使用retain ...
下面我将介绍四种常见的实现方式,包括使用Java标准库、ApacheCommonsMath库、GoogleGuava库和手动实现。Maven ...
假设我们有两个List,分别是list1和list2,我们的目标是将它们合并成一个新的List。###使用ApacheCommonsColl ...
假设有两个列表`list1`和`list2`,你想要得到它们的差集,即`list1-list2`。###使用循环和条件判断这是一种基本的方法 ...