如何在Java中比较两个哈希映射表

3

我的应用程序存储从数据库和用户输入的值,并进行比较。为了存储这些值,我使用了哈希图,其中键为整数,数据为列表,并存储值。键值和数据不一定相同,但是两个哈希图中的所有数据值都应该相同。

哈希图如下: 键: 值

1-[cd,done]
2-[mb,done]
3-[core,done]

另一个是:
1-[mb,done]
2-[core,done]
3-[cd,done]

在代码中,无论值以什么顺序存储,上面的哈希映射应该是相等的,但目前我无法正确编码它...


1
将你已经完成的内容添加到问题中会很有帮助。 - Chathuranga Chandrasekara
2个回答

2
据我理解,您只想测试地图的值是否相等,而不是地图本身。
因此,您可以使用 containsAll 方法比较 values()
hashMap1.values().containsAll(hashMap2.values()) &&
    hashMap2.values().containsAll(hashMap1.values());

您还可以使用CollectionUtils.isEqualCollection来简化代码:

CollectionUtils.isEqualCollection(hashMap1.values(), hashMap2.values());

我之前没有想过使用containsAll()双向执行“equals”。干得好 :) - slipperyseal
1
实际上,双向containsAll()不准确。A,A,B等同于A,B,B。 - slipperyseal
如果集合包含A、B和A、B、C,那么它将在一个方向上返回true,而在另一个方向上不会返回。 - LaurentG
非常感谢,我不知道这个存在 :) - user2572003

0

public static void main(String[] args) {

公共静态无返回值主函数(String[] args){
    Map<Integer,String> map1 = new HashMap<Integer,String>();
    Map<Integer,String> map2 = new HashMap<Integer,String>();

    map1.put(1, "ABC");
    map1.put(2, "1123");
    map2.put(1, "XYZ");

    boolean val = map1.keySet().containsAll(map2.keySet());

    for (Entry<Integer, String> str : map1.entrySet()) {
        System.out.println("================="+str.getKey());

        if(map2.containsKey(str.getKey())){
            System.out.println("Map2 Contains Map 1 Key");
        }
    }

    System.out.println("================="+val);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接