如何比较两个哈希图

时间:2018-07-31 06:24:32

标签: java collections hashmap

举个例子:

Syntax :        
    Map<String,Map<String,String>> A = new HashMap<>();
    Map<String,Map<String,String>> B = new HashMap<>();
Implementation :
    Map<TableA,Map<AID,AVAL>> A = new HashMap<>();
    Map<TableB,Map<BID,BVAL>> B = new HashMap<>();

根据键TableAAIDTableBBID比较HashMaps A和B

迭代这些哈希图的优化方法是什么?

3 个答案:

答案 0 :(得分:2)

与比较地图相比,您应该更好地定义您的意思。您要比较键和值吗?您可以制作第二张地图的副本,在第一张地图上循环,然后从第二张地图的副本中删除第一张地图的钥匙。第二个副本的剩余键是第二个而不是第一个的。另一方面,在第一个而不是第二个中,您不会在周期中找到它们。

答案 1 :(得分:1)

两个Map不一定具有相同数量的元素和给定的map 不能有任何元素。当我们比较两个地图时,如果两个地图相等 没事。如果两者不相等,我想识别(打印)一张地图中的元素,而不是另一张地图中的元素。

Map<String,String> map1 = new HashMap<String,String>();
        map1.put("A", "B");
        map1.put("C","D");
        map1.put("E","F");
        map1.put("E","G");


        Map<String,String> map2 = new HashMap<String,String>();
        map2.put("A", "B");
        map2.put("C","D");
        map2.put("E","F");
        map2.put("F","F");
        map2.put("G","G");

        if (map1.entrySet().containsAll(map2.entrySet())) {
              System.out.println("Map2 is a subset of Map1");
        }
        else {  // find map pairs that are in set 1 but not in set 2
                // expected result is key = E and value = G
        }

        if (map2.entrySet().containsAll(map1.entrySet())) {
              System.out.println("Map1 is a subset of Map2");
        }
        else {  // find map pairs that are in set 2 but not in set 1
               // expected result is key=F, value=F and key=G, value=G
        }

       //compare each entry of map
       for (final String key : map2.keySet()) {
           if (map1.containsKey(key)) {
                     System.out.println("Value:" + map1.get(key));
           }
       }

答案 2 :(得分:1)

我尝试过,您必须通过keySet进行TableA和TableB的比较


Iterator<Map.Entry<TableA ,Map<AID,AVAL>> itr1 = A.entrySet().iterator();
Iterator<Map.Entry<TableB ,Map<BID,BVAL>> itr2 = A.entrySet().iterator();
while(itr1.hasNext() && itr2.hasNext())
{
    Map.Entry<TableA ,Map<AID,AVAL>> entry1 = itr1.next();
    Map.Entry<TableB ,Map<BID,BVAL>> entry2 = itr2.next();
    if((entry1.getKey().equals(entry2.getKey())) 
    Sop("match");
    else Sop("Not FOund");
}