java判断两集合是否相同以及求取交集,并集,差集
时间:2019-11-04
本文章向大家介绍java判断两集合是否相同以及求取交集,并集,差集,主要包括java判断两集合是否相同以及求取交集,并集,差集使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
业务中用时需要判断两集合是否相同,所有提供一个工具方法,使用set集合的特性(元素唯一):
private Map<String,Set<Integer>> getCategoryApiId(Set<Integer> oldAuthSet , Set<Integer> newAuthSet){ Map<String,Set<Integer>> categoryApiId = new HashMap(); if (oldAuthSet!=null&&newAuthSet!=null){ //首先判断两个集合是否一致 if (oldAuthSet.size()==newAuthSet.size()){ Set<Integer> tempSet = new HashSet<Integer>(); tempSet.addAll(oldAuthSet); tempSet.addAll(newAuthSet); if (tempSet.size()==oldAuthSet.size()){ categoryApiId =null;//未增加api个数 logger.info("未新增和删除api"); }else{ //1:交集;2:a-b的差集;3:并集 Set<Integer> apiSet1 = getApiSet(oldAuthSet, newAuthSet, 1); Set<Integer> deleteAuthSet = getApiSet(oldAuthSet, apiSet1, 2); Set<Integer> insertAuthSet = getApiSet(newAuthSet,oldAuthSet , 2);//获取新增的apiId logger.info("删除的api:"+deleteAuthSet); logger.info("新增的api:"+insertAuthSet); categoryApiId.put("insertApi",insertAuthSet); categoryApiId.put("datele",deleteAuthSet); } }else{ //1:交集;2:a-b的差集;3:b-a的差集;4:并集 Set<Integer> apiSet1 = getApiSet(oldAuthSet, newAuthSet, 1); Set<Integer> deleteAuthSet = getApiSet(oldAuthSet, apiSet1, 2);//获取删除的apiId Set<Integer> insertAuthSet = getApiSet(newAuthSet, oldAuthSet, 2);//获取新增的apiId logger.info("删除的api:"+deleteAuthSet); logger.info("新增的api:"+insertAuthSet); categoryApiId.put("insertApi",insertAuthSet); categoryApiId.put("datele",deleteAuthSet); } }else{ if (oldAuthSet==null&&newAuthSet!=null){ //全是新增api logger.info("首次新增授权api"); categoryApiId.put("insertApi",newAuthSet); }else if (oldAuthSet!=null&&newAuthSet==null){ //未修改用户授权api的数据 logger.info("未增加新授权的api"); categoryApiId.put("datele",oldAuthSet); }else if (oldAuthSet==null&&newAuthSet==null){ logger.info("已授权api和新增授权api都为空"); categoryApiId =null; } } return categoryApiId; } private Set<Integer> getApiSet(Set<Integer> oldAuthSet, Set<Integer> newAuthSet,int flag) { Set<Integer> result = new HashSet<Integer>(); if(flag==1){ //求交集 result.clear(); result.addAll(oldAuthSet); result.retainAll(newAuthSet); }else if(flag==2){ //求差集 result.clear(); result.addAll(oldAuthSet); result.removeAll(newAuthSet); } else if (flag==3){ //求并集 result.clear(); result.addAll(oldAuthSet); result.addAll(newAuthSet); } return result; }
原文地址:https://www.cnblogs.com/zyanrong/p/11791508.html
- WebAssembly详解及其使用案例
- 30分钟精通快应用
- BZOJ2440: [中山市选2011]完全平方数(莫比乌斯+容斥原理)
- Dapper扩展之~~~Dapper.Contrib
- JVM活学活用——GC算法 垃圾收集器
- BZOJ1101: [POI2007]Zap(莫比乌斯反演)
- freeRTOS事件组学习
- 洛谷P2522 [HAOI2011]Problem b(莫比乌斯反演)
- JVM活学活用——优化springboot
- .Net中的AOP读书笔记系列之AOP介绍
- 洛谷P3327 [SDOI2015]约数个数和(莫比乌斯反演)
- .Net中的AOP系列之构建一个汽车租赁应用(上)
- Modbus RTU驱动程序开发指引
- freeRTOS任务创建
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 【DB笔试面试866】队列等待之enq: TX - allocate ITL entry
- 【Vue.js】Vue.js组件库Element中的上传、评分、穿梭框和表单
- 【Vue.js】Vue.js项目构建
- 【Vue.js】Vue.js组件库Element中的表格、标签和进度条
- 用个小技巧,趁你不备,rm -rf你的电脑
- 什么是Python 中的EAFP 哲学
- 设计模式--工厂模式
- 设计模式--命令模式
- 安装FastDFS+Nginx
- Redis 中的 5 大数据类型及其常用命令手册
- 设计模式--适配器模式
- 设计模式--外观模式
- 设计模式--模板模式
- springBoot快速入门
- springBoot配置文件