文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java使用不同方式获取两个集合List的交集、补集、并集(相加)、差集(相减)

2023-09-04 05:59

关注

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

并集 = 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.1 导入依赖

                            org.apache.commons            commons-collections4            4.1        

2.2 代码如下:

    public static final List list1 = Arrays.asList("A", "B", "C", "D", "E", "F", null);    public static final List list2 = Arrays.asList("1", "2", "3", "D", "E", "F", null);        @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.1 导入依赖

                            cn.hutool            hutool-all            5.8.12        

3.2 代码如下:

    public static final List list1 = Arrays.asList("A", "B", "C", "D", "E", "F", null);    public static final List list2 = Arrays.asList("1", "2", "3", "D", "E", "F", null);        @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 extends AbstractCollection implements List {     // ....     public E remove(int index) {        throw new UnsupportedOperationException();    }     // ....}

4.1 代码如下:

    public static final List list1 = Arrays.asList("A", "B", "C", "D", "E", "F", null);    public static final List list2 = Arrays.asList("1", "2", "3", "D", "E", "F", null);        @Test    public void streamTest() {        List intersection = list1.stream().filter(list2::contains).collect(Collectors.toList());        System.out.println("交集:" + intersection);        List subtract1 = list1.stream().filter(s -> !list2.contains(s)).collect(Collectors.toList());        System.out.println("集合list1的差集:" + subtract1);        List subtract2 = list2.stream().filter(s -> !list1.contains(s)).collect(Collectors.toList());        System.out.println("集合list2的差集:" + subtract2);        List union1 = list1.parallelStream().collect(Collectors.toList());        List union2 = list2.parallelStream().collect(Collectors.toList());        union1.addAll(union2);        List union3 = union1.stream().distinct().collect(Collectors.toList());        System.out.println("并集:" + union3);    }  

输出:

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};        @Test    public void collectionTest() {        List list1 = new ArrayList<>(Arrays.asList(attr1));        List list2 = new ArrayList<>(Arrays.asList(attr2));        list1.retainAll(list2);        System.out.println("交集:" + list1);        ArrayList list3 = new ArrayList<>(Arrays.asList(attr1));        ArrayList list4 = new ArrayList<>(Arrays.asList(attr2));        Set set = new HashSet<>();        set.addAll(list3);        set.addAll(list4);        System.out.println("并集:" + set);        ArrayList list5 = new ArrayList<>(Arrays.asList(attr1));        ArrayList list6 = new ArrayList<>(Arrays.asList(attr2));        list5.removeAll(list6);        System.out.println("集合A的差集:" + list5);        ArrayList list7 = new ArrayList<>(Arrays.asList(attr1));        ArrayList list8 = new ArrayList<>(Arrays.asList(attr2));        list8.removeAll(list7);        System.out.println("集合B的差集:" + list8);    }  

输出:

来源地址:https://blog.csdn.net/qq_37284798/article/details/129305630

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 资料下载
  • 历年真题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容
咦!没有更多了?去看看其它编程学习网 内容吧