Java三个List取交集

引言

在编程中,经常需要对数据进行处理和操作。而对于集合类型的数据,常常需要进行交集、并集、差集等操作。本文将介绍如何使用Java中的List集合来取交集,并提供相应的代码示例。

什么是交集

在数学中,两个集合的交集是指两个集合中共有的元素组成的集合。对于List集合来说,它们的交集就是两个或多个List集合中都存在的元素组成的新的List集合。

如何取交集

在Java中,可以使用retainAll()方法来取两个List集合的交集。这个方法会修改调用它的List集合,使其只保留与指定集合相同的元素。具体用法如下:

List<String> list1 = new ArrayList<>();
list1.add("a");
list1.add("b");
list1.add("c");

List<String> list2 = new ArrayList<>();
list2.add("b");
list2.add("c");
list2.add("d");

list1.retainAll(list2);

上述代码中,list1和list2分别表示两个List集合。通过调用list1的retainAll()方法,并将list2作为参数传入,就可以得到list1和list2的交集。在上述代码执行完后,list1的值将变为["b", "c"],即list1和list2的交集。

三个List取交集

如果需要取三个List集合的交集,可以先取前两个List集合的交集,然后再与第三个List集合取交集。具体的代码如下:

List<String> list1 = new ArrayList<>();
list1.add("a");
list1.add("b");
list1.add("c");

List<String> list2 = new ArrayList<>();
list2.add("b");
list2.add("c");
list2.add("d");

List<String> list3 = new ArrayList<>();
list3.add("c");
list3.add("d");
list3.add("e");

list1.retainAll(list2);
list1.retainAll(list3);

上述代码中,list1、list2和list3分别表示三个List集合。先将list1和list2取交集,再将结果与list3取交集,就可以得到三个List集合的交集。在上述代码执行完后,list1的值将变为["c"],即list1、list2和list3的交集。

完整代码示例

以下是一个完整的示例代码,演示了如何取三个List集合的交集:

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

public class ListIntersectionExample {
    public static void main(String[] args) {
        List<String> list1 = new ArrayList<>();
        list1.add("a");
        list1.add("b");
        list1.add("c");

        List<String> list2 = new ArrayList<>();
        list2.add("b");
        list2.add("c");
        list2.add("d");

        List<String> list3 = new ArrayList<>();
        list3.add("c");
        list3.add("d");
        list3.add("e");

        list1.retainAll(list2);
        list1.retainAll(list3);

        System.out.println("交集:" + list1);
    }
}

上述代码中,通过retainAll()方法取两个List集合的交集,并将结果与第三个List集合再次取交集。最后将结果打印输出。

序列图

根据上述代码示例,我们可以绘制一个序列图来描述它的执行过程。序列图如下:

sequenceDiagram
    participant list1
    participant list2
    participant list3
    list1->>list2: retainAll(list2)
    list1->>list3: retainAll(list3)

上述序列图描述了list1调用retainAll()方法与list2和list3取交集的过程。

甘特图

根据上述代码示例,我们可以绘制一个甘特图来描述它的执行时间。甘特图如下:

gantt
    dateFormat  YYYY-MM-DD
    section 代码示例
    定义变量      :done, 2022-01-01, 1d
    添加元素到list1  :done, 2022-01-02, 1d
    添加元素到list2  :done, 2022-01-03