当前位置: 代码网 > it编程>编程语言>Java > Java获取两个集合List的交集、补集、并集(相加)和差集(相减)的几种方式

Java获取两个集合List的交集、补集、并集(相加)和差集(相减)的几种方式

2025年04月16日 Java 我要评论
1 明确概念首先知道几个单词的意思:并集 = union交集 = intersection补集 = complement析取 = disjunction减去 = subtract1.1 并集对于两个给

1 明确概念

首先知道几个单词的意思:

  • 并集 = union
  • 交集 = intersection
  • 补集 = complement
  • 析取 = disjunction
  • 减去 = subtract

1.1 并集

对于两个给定集合a、b,由两个集合所有元素构成的集合,叫做a和b的并集。

记作:aub 读作“a并b”

例:{3,5}u{2,3,4,6}= {2,3,4,5,6}

1.2 交集

对于两个给定集合a、b,由属于a又属于b的所有元素构成的集合,叫做a和b的交集。

记作: a∩b 读作“a交b”

例:a={1,2,3,4,5},b={3,4,5,6,8},a∩b={3,4,5}

1.3 补集

一般地,设s是一个集合,a是s的一个子集,由s中所有不属于a的元素组成的集合,叫做子集a在s中的绝对补集。

记作:∁ua,包括三层含义:

1)a是u的一个子集,即a⊊u;

2)∁ua表示一个集合,且∁ua⊊u;

3)∁ua是由u中所有不属于a的元素组成的集合,∁ua与a没有公共元素,u中的元素分布在这两个集合中。

2 使用apache工具包

2.1 导入依赖

<!-- apache 集合工具类 -->

<dependency>

    <groupid>org.apache.commons</groupid>

    <artifactid>commons-collections4</artifactid>

    <version>4.1</version>

</dependency>

2.2 代码如下:

public static final list<string> list1 = arrays.aslist("a", "b", "c", "d", "e", "f", null);

public static final list<string> list2 = arrays.aslist("1", "2", "3", "d", "e", "f", null);

/**

 * apache测试方法

 */

@test

public void apachetest() {

    system.out.println("交集:" + collectionutils.intersection(list1, list2)); // 交集

    system.out.println("补集:" + collectionutils.disjunction(list1, list2)); // 补集

    system.out.println("并集:" + collectionutils.union(list1, list2)); // 并集

    system.out.println("list1的差集:" + collectionutils.subtract(list1, list2)); // list1的差集

    system.out.println("list2的差集:" + collectionutils.subtract(list2, list1)); // list2的差集

}

输出:

3 使用hutool工具包

3.1 导入依赖

<!-- hutool工具类 -->

<dependency>

    <groupid>cn.hutool</groupid>

    <artifactid>hutool-all</artifactid>

    <version>5.8.12</version>

</dependency>

3.2 代码如下:

public static final list<string> list1 = arrays.aslist("a", "b", "c", "d", "e", "f", null);

public static final list<string> list2 = arrays.aslist("1", "2", "3", "d", "e", "f", null);

/**

 * hutool工具类

 */

@test

public void hutooltest() {

    system.out.println("交集:" + collectionutil.intersection(list1, list2)); // 交集

    system.out.println("补集:" + collectionutil.disjunction(list1, list2)); // 补集

    system.out.println("并集:" + collectionutil.union(list1, list2)); //并集

    system.out.println("list1的差集"+collectionutil.subtract(list1,list2));

    system.out.println("list2的差集"+collectionutil.subtract(list2,list1));

    system.out.println("list1的差集:" + collectionutil.subtracttolist(list1, list2));

    system.out.println("list2的差集:" + collectionutil.subtracttolist(list2, list1));

}

输出:

3.3 注意

subtract()和subtracttolist()作用一样,不过处理方式不同,使用subtract()时,参数不能是arrays.aslist()的结果,否则会报异常,因为arrays.aslist()返回的对象是arrays.arraylist,在方法实现里面调用的是abstractlist抽象类里面的removeall()方法,该方法代码如下:

public abstract class abstractlist<e> extends abstractcollection<e> implements list<e> {

    // ....

    public e remove(int index) {

        throw new unsupportedoperationexception();

    }

    // ....

}

4 使用stream方式

4.1 代码如下:

public static final list<string> list1 = arrays.aslist("a", "b", "c", "d", "e", "f", null);

public static final list<string> list2 = arrays.aslist("1", "2", "3", "d", "e", "f", null);

/**

 * stream方式

 */

@test

public void streamtest() {

    list<object> intersection = list1.stream().filter(list2::contains).collect(collectors.tolist());

    system.out.println("交集:" + intersection);

    list<string> subtract1 = list1.stream().filter(s -> !list2.contains(s)).collect(collectors.tolist());

    system.out.println("集合list1的差集:" + subtract1);

    list<string> subtract2 = list2.stream().filter(s -> !list1.contains(s)).collect(collectors.tolist());

    system.out.println("集合list2的差集:" + subtract2);

    list<string> union1 = list1.parallelstream().collect(collectors.tolist());

    list<string> union2 = list2.parallelstream().collect(collectors.tolist());

    union1.addall(union2);

    list<string> union3 = union1.stream().distinct().collect(collectors.tolist());

    system.out.println("并集:" + union3);

}

输出:

5 使用collection接口中的方法

5.1 代码如下:

public static string[] attr1 = new string[]{"a", "b", "c", "d", "e", "f", null};

public static string[] attr2 = new string[]{"1", "2", "3", "d", "e", "f", null};

/**

 * 使用collection接口中的方法

 */

@test

public void collectiontest() {

    list<string> list1 = new arraylist<>(arrays.aslist(attr1));

    list<string> list2 = new arraylist<>(arrays.aslist(attr2));

    list1.retainall(list2);

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

    arraylist<string> list3 = new arraylist<>(arrays.aslist(attr1));

    arraylist<string> list4 = new arraylist<>(arrays.aslist(attr2));

    set<object> set = new hashset<>();

    set.addall(list3);

    set.addall(list4);

    system.out.println("并集:" + set);

    arraylist<string> list5 = new arraylist<>(arrays.aslist(attr1));

    arraylist<string> list6 = new arraylist<>(arrays.aslist(attr2));

    list5.removeall(list6);

    system.out.println("集合a的差集:" + list5);

    arraylist<string> list7 = new arraylist<>(arrays.aslist(attr1));

    arraylist<string> list8 = new arraylist<>(arrays.aslist(attr2));

    list8.removeall(list7);

    system.out.println("集合b的差集:" + list8);

}

输出:

到此结束!!!

以上就是java获取两个集合list的交集、补集、并集(相加)和差集(相减)的几种方式的详细内容,更多关于java获取两个list交集、补集、并集和差集的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com