java求集合的交集、差集和并集

时间:2025-04-24 06:59:15

一、本文介绍两种写法

1原生写法

写法
<dependency>
    <groupId></groupId>
    <artifactId>guava</artifactId>
    <version>18.0</version>
</dependency>

二、代码

import ;

import ;
import ;

/**
 * java求集合的交集、差集和并集
 */
public class CollectionOperation {

    public static void main(String[] args) {
        Set<Integer> result = new HashSet<Integer>();

        //双括号语法 -> 本质是: 匿名内部类 + 实例化代码块
        //改写之后的代码就非常容易理解了。显然这是在HashSet的构造器中写了一个匿名内部类,这个匿名内部类含有一个实例初始化块
        //初始化块的内容是三个add()函数,向被初始化的this指向的HashSet中添加了三个元素。
        Set<Integer> set1 = new HashSet<Integer>() {
            private static final long serialVersionUID = 1L;

            {
                add(1);
                add(3);
                add(5);
            }
        };

        Set<Integer> set2 = new HashSet<Integer>() {
            private static final long serialVersionUID = 1L;

            {
                add(1);
                add(2);
                add(3);
            }
        };
        ("set1 " + set1);
        ("set2 " + set2);
        //原生写法
        ("原生写法 ===================");
        test1(result, set1, set2);

        //写法
        ("写法 ===================");
        test2(result, set1, set2);

    }

    public static void test1(Set<Integer> result, Set<Integer> set1, Set<Integer> set2) {
        //交集
        ();
        (set1);
        (set2);
        ("交集:" + result);

        //差集
        ();
        (set1);
        (set2);
        ("差集:" + result);

        //并集
        ();
        (set1);
        (set2);
        ("并集:" + result);
    }

    public static void test2(Set<Integer> result, Set<Integer> set1, Set<Integer> set2) {
        //交集
        <Integer> intersection = (set1, set2);
        ("交集:" + ()); // 可以使用交集,但不可变拷贝的读取效率更高

        //差集
        <Integer> difference = (set1, set2);
        ("差集:" + ());

        //并集
        <Integer> union = (set1, set2);
        ("并集:" + ());
    }

}

三、输出

set1 [1, 3, 5]
set2 [1, 2, 3]
原生写法 ===================
交集:[1, 3]
差集:[5]
并集:[1, 2, 3, 5]
写法 ===================
交集:[1, 3]
差集:[5]
并集:[1, 3, 5, 2]