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


相关推荐: 如何快速上传建站程序避免常见错误?  免费视频制作网站,更新又快又好的免费电影网站?  网易LOFTER官网链接 老福特网页版登录地址  手机网站制作与建设方案,手机网站如何建设?  Laravel如何配置任务调度?(Cron Job示例)  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  LinuxShell函数封装方法_脚本复用设计思路【教程】  JavaScript如何实现类型判断_typeof和instanceof有什么区别  Laravel如何升级到最新版本?(升级指南和步骤)  Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  高防服务器如何保障网站安全无虞?  Claude怎样写结构化提示词_Claude结构化提示词写法【教程】  5种Android数据存储方式汇总  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析  大连网站制作公司哪家好一点,大连买房网站哪个好?  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】  怎么用AI帮你为初创公司进行市场定位分析?  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  如何用VPS主机快速搭建个人网站?  javascript中的try catch异常捕获机制用法分析  浅谈javascript alert和confirm的美化  北京企业网站设计制作公司,北京铁路集团官方网站?  javascript中闭包概念与用法深入理解  canvas 画布在主流浏览器中的尺寸限制详细介绍  Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  javascript中对象的定义、使用以及对象和原型链操作小结  如何用免费手机建站系统零基础打造专业网站?  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  如何基于云服务器快速搭建网站及云盘系统?  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  如何用低价快速搭建高质量网站?  Bootstrap整体框架之CSS12栅格系统  如何在Windows 2008云服务器安全搭建网站?  googleplay官方入口在哪里_Google Play官方商店快速入口指南  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  如何在企业微信快速生成手机电脑官网?  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  node.js报错:Cannot find module &#39;ejs&#39;的解决办法  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?