java判断两集合是否相同以及求取交集,并集,差集

Posted ☆☆☆★☆☆☆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
    }

 

以上是关于java判断两集合是否相同以及求取交集,并集,差集的主要内容,如果未能解决你的问题,请参考以下文章

求2个list的差集

Excel 怎样求差集,并集和交集还有容错

用java编写程序,求集合的并集、交集和差集

java 求交集 并集 差集

java找到两个list的交集并集差集

集合操作