Java中交集、并集、差集、补集、去重的实现

一、交集

1. 交集的实现

//交集
    @Test
    public void intersection(){
        //向集合中添加元素
        ArrayList<String> datas = new ArrayList<>();
        Collections.addAll(datas, "张三", "李四", "王五", "赵六");
        //向集合中添加元素
        ArrayList<String> arrs = new ArrayList<>();
        Collections.addAll(arrs, "田七", "赵六", "张三", "阿飞");
        // 求交集
        datas.retainAll(arrs);
        for (String str : datas) {
            System.out.println(str);
        }
    }

2. Java8 Stream 中交集的实现

   //Java8 Stream 中交集的实现
    @Test
    public void intersectionJava8(){
        //向集合中添加元素
        ArrayList<String> datas = new ArrayList<>();
        Collections.addAll(datas, "张三", "李四", "王五", "赵六");
        //向集合中添加元素
        ArrayList<String> arrs = new ArrayList<>();
        Collections.addAll(arrs, "田七", "赵六", "张三", "阿飞");
        // 求交集
        //交集
        List<String> list3 = datas.stream().filter(arrs::contains).collect(Collectors.toList());
        System.out.println(list3);
    }

二、并集

并集的实现

    //并集
    @Test
    public void union(){
        ArrayList<String> datas = new ArrayList<>();
        //向集合中添加元素
        Collections.addAll(datas, "张三", "李四", "王五", "赵六");
        //向集合中添加元素
        ArrayList<String> arrs = new ArrayList<>();
        Collections.addAll(arrs, "田七", "赵六", "张三", "阿飞");
        // 求并集
        datas.removeAll(arrs);//先从本集合中删除另一个集合中相同的元素
        datas.addAll(arrs);//再把另外一个集合中所有元素,添加到本集合中
        for (String str : datas) {
            System.out.println(str);
        }
    }

三、差集

1. 差集的实现

 //差集:两个集合排除相同的剩余部分!
    @Test
    public void DifferenceSet(){
        ArrayList<String> datas = new ArrayList<>();
        //向集合中添加元素
        Collections.addAll(datas, "张三", "李四", "王五", "赵六");
        //向集合中添加元素
        ArrayList<String> arrs = new ArrayList<>();
        Collections.addAll(arrs, "田七", "赵六", "张三", "阿飞");
        // 求差集 张三,李四,王五 ,赵六 | 田七,赵六,张三 ,阿飞 ---> 李四,王五,田七,阿飞
        ArrayList<String> list = (ArrayList<String>) datas.clone();// 张三,李四,王五 ,赵六
        datas.removeAll(arrs);// datas 李四,王五
        arrs.removeAll(list);// arrs 田七,阿飞
        datas.addAll(arrs);// 李四,王五,田七,阿飞

        for (String str : datas) {
            System.out.println(str);
        }
    }

2. java8差集的实现

   //差集:两个集合排除相同的剩余部分! Java8 Stream
    @Test
    public void DifferenceSetJava8(){
        List<String> list1 = Lists.newArrayList("a", "b", "c");
        List<String> list2 = Lists.newArrayList("a", "b", "d", "e");
        //差集: list1 - list2
        List<String> list4 = list1.stream().filter(i -> !list2.contains(i)).collect(Collectors.toList());
        System.out.println(list4);
        //差集: list2 - list1
        List<String> list5 = list2.stream().filter(i -> !list1.contains(i)).collect(Collectors.toList());
        System.out.println(list5);
    }

四、补集

补集的实现

  //补集
    @Test
    public void Complement(){
        ArrayList<String> aList = new ArrayList<>();
        //向集合中添加元素
        Collections.addAll(aList, "1", "2", "3", "4");
        //向集合中添加元素
        ArrayList<String> bList = new ArrayList<>();
        Collections.addAll(bList, "2", "4", "5", "6");
        ArrayList<String> cList = (ArrayList<String>) aList.clone();
        cList.retainAll(bList);
        System.out.println("A 与 B 并集:" + cList);
        bList.removeAll(cList);
        System.out.println("A 关于 B 的相对补集:" + bList);
        aList.removeAll(cList);
        System.out.println("B 关于 A 的相对补集:" + aList);
    }

五、去重

java8 去重实现

    //去重java8
    @Test
    public void delRepeat(){
        ArrayList<String> aList = new ArrayList<>();
        //向集合中添加元素
        Collections.addAll(aList, "1", "2", "3", "4");
        //向集合中添加元素
        ArrayList<String> bList = new ArrayList<>();
        Collections.addAll(bList, "2", "4", "5", "6");
        aList.addAll(bList);
        System.out.println("A 与 B 并集:" + aList);
        Set<String> collect = aList.stream().collect(Collectors.toSet());

        System.out.println("去重:" + collect);
    }

去重对象实现

 //去重对象
    @Test
    public void delRepeat2(){
        List<User> userList = new ArrayList<>();
        userList.add(new User("ellin", 90, 1));
        userList.add(new User("charles", 98, 2));
        userList.add(new User("frank", 78, 3));
        userList.add(new User("frank", 78, 4));
        userList.add(new User("ellin", 90, 5));
        userList.add(new User("ellin", 90, 5));
        //使用HashSet-无序
        Set<User> userSet = new HashSet<>();
        userSet.addAll(userList);
        System.out.println(userSet);
        System.out.println("**************");

        //使用LinkedHashSet-有序
        List<User> newUserList = new ArrayList<>(new LinkedHashSet<>(userList));
        System.out.println(newUserList.toString());
    }

去重字符串实现

  //去重字符串
    @Test
    public void delRepeat3(){
        ArrayList<String> list = new ArrayList<>();
        //向集合中添加元素
        Collections.addAll(list, "1", "2", "3", "4","4");
        List<String> newList = new ArrayList<>(new LinkedHashSet<>(list));
        System.out.println(newList);
    }
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值