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

如果我想知道它们中是否包含不同的键,并且如果这些键的值彼此匹配,我怎么能最好地比较两个HashMap

 Map mapA = new HashMap(); mapA.put("A", "1"); mapA.put("B", "2"); Map mapB = new HashMap(); mapB.put("D", "4"); mapB.put("A", "1"); 

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

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

对两个HashMapkeySet()进行equals检查。

注意:

如果您的Map包含String键,则没有问题,但如果您的Map包含objA类型键,那么您需要确保您的类objA实现equals()

只需使用:

mapA.equals(mapB);

将指定对象与此映射进行比较以获得相等性。 如果给定对象也是一个映射,并且两个映射表示相同的映射,则返回true

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

 public boolean mapsAreEqual(Map mapA, Map 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; } 
 /* JAVA 8 using streams*/ public static void main(String args[]) { Map map = new HashMap(); map.put(100, true); map.put(1011, false); map.put(1022, false); Map map1 = new HashMap(); map1.put(100, false); map1.put(101, false); map1.put(102, false); boolean b = map.entrySet().stream().filter(value -> map1.entrySet().stream().anyMatch(value1 -> (value1.getKey() == value.getKey() && value1.getValue() == value.getValue()))).findAny().isPresent(); System.out.println(b); } 
 public boolean compareMap(Map map1, Map 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; }