比较两个map是否相同

一、问题描述

判断两个map是否相同,相同返回true,反之返回false。

二、情况分析

map存在map==null,map为空,map的key为null,map的value为null这四种情况,比较时需要将所有情况考虑在内。

三、方法代码

下面是比较两map的函数方法。

public static Boolean mapCompare(Map<String,Object> map1,Map<String,Object> map2) {
        try {
            // map为null
            if(map1 ==  null && map2 == null){
                return true;
            } else if (map1 == null || map2 == null) {
                return false;
            }

            // map不为空
            if (map1.size() != map2.size()) {
                return false;
            }

            for(Object k:map1.keySet()) {
                if(!map2.containsKey(k)){
                    return false;
                }

                // 如果map1.value为null或map2.value为null
                if (map1.get(k) == null || map2.get(k) == null) {
                    boolean t = (map1.get(k) == null);
                    // (v为null且map2.value不为null)或者(v不为null且map2.value为null)
                    if ((map1.get(k)== null && map2.get(k)!= null) || (map1.get(k) != null && map2.get(k) == null) ){
                        return false;
                    }
                } else if (!map1.get(k).equals(map2.get(k))) { // map1和map2的value都不为null,判断其是否相等
                    return false;
                }
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("Map元素比对异常:", e.getCause());
        }
    }

四、测试方法

public static void main(String[] args) {
        Map<String,Object> map = new HashMap<>();
        Map<String,Object> map1 = new HashMap<>();
        Map<String,Object> map2 = new HashMap<>();
        Map<String,Object> map3 = null;
        Map<String,Object> map4 = null;
        Map<String,Object> map5 = new HashMap<>();
        Map<String,Object> map6 = new HashMap<>();
        Map<String,Object> map7 = new HashMap<>();
        Map<String,Object> map8 = new HashMap<>();

        map.put("a",2342);
        map.put("ab","null");
//        map.put(null,"2342");
//        System.out.println(map);

        map1.put("a",2342);
        map1.put("ab",null);
//        map1.put("null","2342");
        System.out.println(map1);

        map2.put("a",2342);
        map2.put("1",null);

        map7.put(null,2342);
        map7.put("ab","null");
//        map.put(null,"2342");
//        System.out.println(map);

        map8.put("a",2342);
        map8.put("ab","null");
//        System.out.println(map2);

//        System.out.println(mapCompare(map1,map)); // true
//
//        System.out.println(mapCompare(map,map2)); // true
//        System.out.println(mapCompare(map2,map)); // true
//
//        System.out.println(mapCompare(map2,map1)); // true
//        System.out.println(mapCompare(map1,map2)); // true

//        System.out.println(mapCompare(map3,map4)); // 都为null, true
//        System.out.println(mapCompare(map1,map4)); // 一个为null, false

//        System.out.println(mapCompare(map5,map6));  // 都为空,true

//        System.out.println(mapCompare(map1,map6));  // 一个为空,false
//        System.out.println(mapCompare(map6,map1));  // 一个为空,false

//        System.out.println(mapCompare(map,map1)); // 不为null且不为空,长度不等,false
//        System.out.println(mapCompare(map,map1)); // 不为null且不为空,长度相等,map2相同k对应的v为null,false
//        System.out.println(mapCompare(map1,map2)); // 不为null且不为空,长度相等,map1中的k在2中不存在,false
//        System.out.println(mapCompare(map7,map8)); // 不为null且不为空,长度相等,map1中的k为null

    }

测试了很多次,目前还没发现有不能覆盖的情况,至此记录一下。
如果有没考虑到的情况还请指出。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值