Java里如何找出两个集合的差集_集合差集运算示例
发布时间 - 2025-12-30 00:00:00 点击率:次Java中求集合差集核心用removeAll():A.removeAll(B)得A−B,需复制可修改集合;自定义对象须重写equals/hashCode;对称差集需组合计算;Stream方式适合只读场景。
Java 中找出两个集合的差集,核心是用 removeAll() 方法:它会从调用方集合中移除所有存在于参数集合中的元素,结果即为“调用方对参数方的差集”(A − B)。
基本差集:A 减去 B
这是最常用场景:保留集合 A 中有、但集合 B 中没有的元素。
- 必须确保调用方集合是可修改的(如
new ArrayList(a)或new HashSet(a)),因为removeAll()会直接修改原集合 -
removeAll()返回boolean,表示是否发生了变化,实际差集就是调用后剩下的元素 - 原始集合 A 不应被直接复用(若需保留),建议先复制一份再操作
示例:
ListList
List
diff.removeAll(b); // 移除 b 中所有元素
System.out.println(diff); // [apple, cherry]
注意元素类型必须正确重写 equals 和 hashCode
如果集合里是自定义对象(比如 User 类),removeAll() 能否正确识别“相同元素”,完全取决于该类是否重写了 equals() 和 hashCode()。
- 没重写时,默认按引用比较,两个内容相
同的对象也会被视为不同,导致差集计算错误 - 例如两个
new User("Alice", 25)实例,若未重写equals,removeAll不会把它们当作同一个元素移除 - 推荐用 Lombok 的
@EqualsAndHashCode,或 IDE 自动生成这两个方法
对称差集(A Δ B):只在其中一个集合中出现的元素
对称差集 = (A − B) ∪ (B − A),即“互斥部分”。Java 没有内置方法,但可以组合实现:
- 先复制 A,执行
removeAll(B)得到 A−B - 再复制 B,执行
removeAll(A)得到 B−A - 最后合并两个结果(用
addAll())
示例(用 Set 更合适,避免重复):
SetSet
Set
symDiff.removeAll(b);
symDiff.addAll(new HashSet(b) {{ removeAll(a); }});
System.out.println(symDiff); // [a, d]
Stream 方式(Java 8+,适合只读场景)
如果不想修改原集合,且偏好函数式风格,可用 Stream 过滤:
a.stream().filter(x -> !b.contains(x)).collect(Collectors.toList())- 注意:当
b是大集合时,contains()效率依赖其底层实现;建议b是HashSet(O(1) 查找),而非ArrayList(O(n)) - 此方式不改变任何集合,语义清晰,适合链式处理或临时计算
基本上就这些。差集运算本身不复杂,但容易忽略可变性、对象相等性、性能这三点。
# java
# app
# ai
# apple
# stream
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法
使用Dockerfile构建java web环境
晋江文学城电脑版官网 晋江文学城网页版直接进入
iOS UIView常见属性方法小结
Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】
Swift中swift中的switch 语句
奇安信“盘古石”团队突破 iOS 26.1 提权
个人网站制作流程图片大全,个人网站如何注销?
如何确保FTP站点访问权限与数据传输安全?
HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】
如何批量查询域名的建站时间记录?
Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境
如何用已有域名快速搭建网站?
Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】
如何撰写建站申请书?关键要点有哪些?
详解Android——蓝牙技术 带你实现终端间数据传输
在Oracle关闭情况下如何修改spfile的参数
如何快速搭建二级域名独立网站?
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
Linux系统命令中screen命令详解
Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区
Laravel如何实现密码重置功能_Laravel密码找回与重置流程
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
微信小程序 配置文件详细介绍
公司网站制作需要多少钱,找人做公司网站需要多少钱?
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
香港服务器部署网站为何提示未备案?
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
Laravel如何使用Service Container和依赖注入?(代码示例)
安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出
简历没回改:利用AI润色让你的文字更专业
Laravel storage目录权限问题_Laravel文件写入权限设置
Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】
Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)
node.js报错:Cannot find module 'ejs'的解决办法
Python高阶函数应用_函数作为参数说明【指导】
Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】
Laravel用户密码怎么加密_Laravel Hash门面使用教程
长沙做网站要多少钱,长沙国安网络怎么样?
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】
html文件怎么打开证书错误_https协议的html打开提示不安全【指南】
七夕网站制作视频,七夕大促活动怎么报名?
Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程
ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集
Linux系统命令中tree命令详解
Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制


同的对象也会被视为不同,导致差集计算错误