比较相同值和相同键集的两个哈希映射?

时间:2014-01-07 10:26:18

标签: java collections hashmap comparison

我如何才能最好地比较两个HashMap,如果我想知道它们中是否包含不同的键,以及它们的值是否相互匹配。

Map<objA, objB> mapA = new HashMap<objA, objB>();
mapA.put("A", "1");
mapA.put("B", "2");

Map<objA, objB> mapB = new HashMap<objA, objB>();
mapB.put("D", "4");
mapB.put("A", "1");

将A与B进行比较时,由于键B和D不同,它会失败。

我怎样才能最好地比较未分类的哈希图?

6 个答案:

答案 0 :(得分:41)

只需使用:

mapA.equals(mapB);

  

将指定对象与此映射进行相等性比较。返回true   如果给定对象也是地图,则两个地图代表相同   映射

答案 1 :(得分:26)

equals的{​​{1}} keySet()进行HashMap检查。

注意:

如果您的Map包含String个密钥,那么这没问题,但如果您的地图包含objA个类型密钥,那么您需要确保您的班级objA实施equals()

答案 2 :(得分:9)

将mapB中的每个键与mapA中的对应键进行比较。然后检查mapB中是否存在mapA中没有任何键

public boolean mapsAreEqual(Map<String, String> mapA, Map<String, String> mapB) {

    try{
        for (String k : mapB.keySet())
        {
            if (!mapA.get(k).equals(mapB.get(k))) {
                return false;
            }
        } 
        for (String y : mapA.keySet())
        {
            if (!mapB.containsKey(y)) {
                return false;
            }
        } 
    } catch (NullPointerException np) {
        return false;
    }
    return true;
}

答案 3 :(得分:1)

requests.post(data=json.dumps(postData))

答案 4 :(得分:0)

public boolean compareMap(Map<String, String> map1, Map<String, String> map2) {

    if (map1 == null || map2 == null)
        return false;

    for (String ch1 : map1.keySet()) {
        if (!map1.get(ch1).equalsIgnoreCase(map2.get(ch1)))
            return false;

    }
    for (String ch2 : map2.keySet()) {
        if (!map2.get(ch2).equalsIgnoreCase(map1.get(ch2)))
            return false;

    }

    return true;
}

答案 5 :(得分:0)

如果您有两个地图,让我们说map1和map2,然后使用java8 Streams,我们可以使用下面的代码比较地图。但是建议使用等号而不是!=或==

boolean b = map1.entrySet().stream().filter(value -> 
            map2.entrySet().stream().anyMatch(value1 -> 
            (value1.getKey().equals(value.getKey()) && 
  value1.getValue().equals(value.getValue())))).findAny().isPresent();   


System.out.println("comparison  "+b);