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

举报
穆雄雄 发表于 2022/12/12 20:18:18 2022/12/12
【摘要】 前言:在初中数学,我们也有集合的概念,非但如此,还有集合中的一些运算,例如交集、并集、差集等,那么我们java中的集合是否有这样的运算呢?今天我们就一起来看看!01并集就是将两个集合合起来,元素都放在一起,这个比较简单,我们只需要使用集合的addAll方法就可以,代码如下:public static void main(String[] args) { //第一个集合 List<...

前言:在初中数学,我们也有集合的概念,非但如此,还有集合中的一些运算,例如交集、并集、差集等,那么我们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循环就遍历,操作,这种方法想都不会想到。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。