• 集合还有这么优雅的运算法?


    前言:在初中数学,我们也有集合的概念,非但如此,还有集合中的一些运算,例如交集、并集、差集等,那么我们java中的集合是否有这样的运算呢?今天我们就一起来看看!

    01

    并集

    就是将两个集合合起来,元素都放在一起,这个比较简单,我们只需要使用集合的addAll方法就可以,代码如下:

    public static void main(String[] args) {
        //第一个集合
        List<String> list1 = new ArrayList<String>();
        list1.add("一");
        list1.add("二");
        list1.add("三");
        System.out.println("第一个集合中的元素:");
        for (String str : list1) {
          System.out.print(str + " ");
        }
        
        //第二个集合
        List<String> list2 = new ArrayList<String>();
        list2.add("二");
        list2.add("三");
        list2.add("四");
        
        System.out.println("\n第二个集合中的元素:");
        for (String str : list2) {
          System.out.print(str + " ");
        }
        
        //集合之间的交集运算
        list1.addAll(list2);
        System.out.println("\n最后集合中的元素:");
        for (String str : list1) {
          System.out.print(str + " ");
        }
      }

    运行结果:

    此时的list1集合里面不光有原来的元素,还有list2的元素。

    02

    交集

    即两个集合中都有的元素,一个有另一个也有的,代码如下:(省略声明和初始化集合的代码,和第一个示例一样)

    list1.retainAll(list2);

    运行结果如下:

    很显然,共同存在的只有“二三”,大家想想,list1中的“一”还在吗?

    03

    差集

    即在list1中存在的,但是list2中没有的元素,代码如下:(省略声明和初始化集合的代码,和第一个示例一样)

    list1.removeAll(list2);

    运行结果:

    显然:“一”在list2中是不存在的。原理就是删除list1中出现在list2中的元素。

    04

    无重复的并集

    我们都知道,并集是list1+list2的所有,那如果list1里面有的,list2里面也有,你这一并集,最后的list1集合肯定会有重复的元素,那如何实现不重复的并集呢?代码如下:

    public static void main(String[] args) {
        //第一个集合
        List<String> list1 = new ArrayList<String>();
        list1.add("一");
        list1.add("二");
        list1.add("三");
        System.out.println("第一个集合中的元素:");
        for (String str : list1) {
          System.out.print(str + " ");
        }
        
        //第二个集合
        List<String> list2 = new ArrayList<String>();
        list2.add("二");
        list2.add("三");
        list2.add("四");
        
        System.out.println("\n第二个集合中的元素:");
        for (String str : list2) {
          System.out.print(str + " ");
        }
        
        //集合之间的交集运算
        list1.removeAll(list2);
        list1.addAll(list2);
        System.out.println("\n最后集合中的元素:");
        for (String str : list1) {
          System.out.print(str + " ");
        }
      }

    运行结果:

    代码分析,我们先使用差集,过滤一下list1中所有在list2中出现的元素,出现了就删除,也就是remoAll方法调用完之后,list1中还剩“一”,然后list2中还有“二、三、四”,两个一并集,自然结果就是“一、二、三、四”

    你看看这样处理集合优雅不优雅?其实通常我们遇到类似的需求时,一般都会拿起来for循环就遍历,操作,这种方法想都不会想到。

    往期精彩

    自从有了这款辣椒酱,拌饭再也不用老干妈

    2020-10-30

    使用相对长度单位rem布局网页内容

    2020-11-03

    使用相对长度单位em布局网页内容

    2020-11-02

    binarySearch与IndexOf的那些事儿~

    2020-11-01

    新机必装!那些你不知道的实用技软件在这里!文末免费获取

    2020-10-31

    如何使用bootstrap实现轮播图?

    2020-10-29

    班级日常分享:一天一瞬间!

    2020-10-29

    点分享

    点点赞

    点在看

  • 相关阅读:
    AI零基础入门之人工智能开启新时代—下篇
    AI零基础入门之人工智能开启新时代—上篇
    Markdown 快速入门
    Linux GCC/G++ 基础(1) 之
    解决 Ubuntu 下使用 sublime text 3 无法输入中文
    WPF:界面布局之- TaiChi
    常用命令之- touch
    微软net平台是不是快完了?看了一天智联招聘,现在连传统的网站或系统平台都不怎么用net了
    蓝牙Ble开发(支持API18<Android 4.3 Jelly>及以上)
    Android系统休眠对程序的影响以及处理
  • 原文地址:https://www.cnblogs.com/a1111/p/14877370.html
Copyright © 2020-2023  润新知