java计算集合对称差的示例代码

发布时间 - 2026-01-11 03:03:52    点击率:


本文简单介绍下计算集合对称差的几种方法。

maven

    <dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
      <version>22.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-collections4</artifactId>
      <version>4.1</version>
    </dependency>

对称差

两个集合的对称差是只属于其中一个集合,而不属于另一个集合的元素组成的集合。

集合A和B的对称差通常表示为AΔB,对称差的符号在有些图论书籍中也使用符号⊕来表示。例如:集合{1,2,3}和{3,4}的对称差为{1,2,4}。

guava

在guava里头是用symmetricDifference方法

    Set<Integer> a = new HashSet<>(Arrays.asList(1, 2, 3, 4));
    Set<Integer> b = new HashSet<>(Arrays.asList(3, 4, 5, 6));
    Sets.SetView<Integer> result = Sets.symmetricDifference(a,b);
    System.out.println(result);

collection4

在collection4里头是用disjunction方法

    Set<Integer> a = new HashSet<>(Arrays.asList(1, 2, 5));
    Set<Integer> b = new HashSet<>(Arrays.asList(1, 2, 3));
    SetUtils.SetView<Integer> result = SetUtils.disjunction(a, b);
    assertTrue(result.toSet().contains(5) && result.toSet().contains(3));

改进

上述的两个方法都不能标注哪些元素属于第一个集合,哪个属于第二个集合,有时候我们又想获取对称差的时候顺便能够计算出哪个元素属于哪个集合,这个时候怎么办呢,可以模仿collection4中的方法来获取:

public static <O> Pair<Collection<O>,Collection<O>> disjunction2(final Collection<? extends O> first,
                                  final Collection<? extends O> second,
                                  final Predicate<O> p) {
    final List<O> firstList = first.stream()
        .filter(e -> p.evaluate(e))
        .collect(Collectors.toList());

    final List<O> secondList = second.stream()
        .filter(e -> !firstList.remove(e))
        .collect(Collectors.toList());
    return Pair.of(firstList,secondList);
  }

实例

final List<String> first = Arrays.asList("bbb", "ccc","dddd","aaa");
final List<String> second = Arrays.asList("aaa", "zzz", "ccc");
System.out.println(disjunction(first,second,TruePredicate.truePredicate()));

输出

([bbb, dddd],[zzz])

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# java  # 计算集合对称差  # 集合的对称差  # Java使用Math.random()结合蒙特卡洛方法计算pi值示例  # Java小程序计算圆周率代码  # java中计算集合的交差并集示例代码  # java中的数学计算函数的总结  # java 简单的计算器程序实例代码  # Java计算球从100米高度自由落下问题  # Java编程计算兔子生兔子的问题  # java模仿windows计算器示例  # Java简易计算器程序设计  # Java计算几何图形面积的实例代码  # Java算法之递归算法计算阶乘  # Java模拟计算机的整数乘积计算功能示例  # 第一个  # 而不  # 第二个  # 这个时候  # 中也  # 其中一个  # 方法来  # 大家多多  # 计算出  # 几种方法  # 图论  # Sets  # 差是只  # SetView  # symmetricDifference  # Integer  # Set  # asList  # Arrays 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  JS经典正则表达式笔试题汇总  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  Laravel如何生成API文档?(Swagger/OpenAPI教程)  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  如何用wdcp快速搭建高效网站?  java获取注册ip实例  php485函数参数是什么意思_php485各参数详细说明【介绍】  利用python获取某年中每个月的第一天和最后一天  Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】  如何安全更换建站之星模板并保留数据?  如何在VPS电脑上快速搭建网站?  如何快速打造个性化非模板自助建站?  网站页面设计需要考虑到这些问题  Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  微信h5制作网站有哪些,免费微信H5页面制作工具?  今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】  打造顶配客厅影院,这份100寸电视推荐名单请查收  Laravel的.env文件有什么用_Laravel环境变量配置与管理详解  Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  如何在景安服务器上快速搭建个人网站?  Laravel定时任务怎么设置_Laravel Crontab调度器配置  网易LOFTER官网链接 老福特网页版登录地址  JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)  如何有效防御Web建站篡改攻击?  油猴 教程,油猴搜脚本为什么会网页无法显示?  使用Dockerfile构建java web环境  Mybatis 中的insertOrUpdate操作  Laravel如何实现API版本控制_Laravel版本化API设计方案  如何在Windows环境下新建FTP站点并设置权限?  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  如何在Windows服务器上快速搭建网站?  制作公司内部网站有哪些,内网如何建网站?  Python文件操作最佳实践_稳定性说明【指导】  Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验  实例解析Array和String方法  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】  香港服务器部署网站为何提示未备案?  Linux系统运维自动化项目教程_Ansible批量管理实战  如何快速生成专业多端适配建站电话?  如何在云主机上快速搭建网站?  香港网站服务器数量如何影响SEO优化效果?  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  Python并发异常传播_错误处理解析【教程】