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

mem*_*und 31 java collections comparison hashmap

HashMap如果我想知道它们中是否包含不同的键,并且它们的值是否相互匹配,我怎样才能最好地比较两个s.

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");
Run Code Online (Sandbox Code Playgroud)

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

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

use*_*315 44

只需使用:

mapA.equals(mapB);

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

  • @EdwardBrey然后告诉我你引用的内容之间的区别?因为我没有看到任何.它做同样的事情...... _"这个实现首先检查对象的结构.如果它不是一个映射或**不同大小**,则返回false.否则它迭代它自己的入口集**在**对象中查找每个**条目的键**.如果任何**值**不等于**相同**键的另一个映射值**,则返回false.否则它返回true."_ (2认同)

Nar*_*hai 27

做一个equals支票上keySet()两者HashMap秒.

注意:

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

  • 是的,但OP也希望它们具有相同的映射.请注意,您还需要覆盖hashCode. (7认同)

Ant*_*lls 11

将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;
}
Run Code Online (Sandbox Code Playgroud)