我有两个map,一个是我的map;
一个是别人修改的map,
我想找出新map比原来的map有哪些改变。有什么好方法?

解决方案 »

  1.   

    Map 中的方法:
    boolean containsKey(Object key)
    boolean containsValue(Object value)
      

  2.   


    遍历取出原来的map 中的key,value然后用下面的方法比较
      

  3.   


    Map<String, String> mapA = new HashMap<String, String>();
          Map<String, String> mapB = new HashMap<String, String>();
          Map<String, String> mapAdd = new HashMap<String, String>(mapB);
          Map<String, String> mapDel = new HashMap<String, String>();
          Map<String, String> mapChange = new HashMap<String, String>();
          Map<String, String> mapUnChange = new HashMap<String, String>();      Iterator<String> it = mapA.keySet().iterator();      while(it.hasNext()) {
             String key = it.next();
             String val = mapA.get(key);         if(mapB.containsKey(key)) {
                String bVal = mapB.get(key);            if(val != null && val.equals(bVal) || val == bVal) {
                   mapUnChange.put(key, val);
                }
                else {
                   mapChange.put(key, val);
                }            mapAdd.remove(key);
             }
             else {
                mapDel.put(key, val);
             }
          }
       }
      

  4.   


    如果是判断key有没有变动,可以用集合的交并差试试看
    for example//假设map1是旧,map2是新,假设Map的泛型是Map<XX,YY>
    int flag = 0;
    for (XX xx : map1.keySet().removeAll(map1.keySet())) {
        System.out.println("新增了key:" + xx);
        flag = 1;
    }
    for (XX xx : map1.keySet().removeAll(map2.keySet())) {
        System.out.println("删除了key:" + xx);
        flag = 2;
    }
    if (flag == 0) {
        System.out.println("key没有变动");
    }如果key和value都要判断,就用循环
    for(Map.EntrySet<XX,YY> e : map1.entrySet()) {
        if (map2.containsKey(e.getKey())) {
            if (!map2.get(e.getKey()).equals(e.getValue())) {
                System.out.println("修改了key:" + e.getKey());
            }
        } else {
            System.out.println("删除了key:" + e.getKey());
        }
    }
    for (XX xx : map2.keySet().removeAll(map1.keySet())) {
        System.out.println("新增了key:" + e.getKey());
    }
      

  5.   

    ls的map2.get(e.getKey()).equals(e.getValue())可能会NullPointException的
      

  6.   

    做下null判断就可以了
    if (map2.get(e.getKey())==null && e.getValue()==null) {} else if (map2.get(e.getKey()) == null || e.getValue() == null ||
                !map2.get(e.getKey()).equals(e.getValue())) {
        System.out.println("修改了key:" + e.getKey());
    }