Java HashMap<String,List<String>>() 比较

5

我在想比较这两个HashMap的最佳方法。我希望验证它们是否相同,如果不同,则是什么不同之处。如果有关系,那么我想知道第二个有/没有第一个哈希映射具有的内容。我需要知道一个哈希映射具有而另一个哈希映射没有的键,以及每个键的值列表差异。我希望有一种简单的方式来映射这个问题,但不确定。基本示例:

    HashMap<String, List<String>> hmOne = new HashMap<String, List<String>>();
    List<String>l1 = new ArrayList<String>();

    l1.add("one");
    l1.add("two");
    l1.add("three");
    l1.add("four");
    l1.add("five");
    hmOne.put("firstkey", l1);
    l1 = new ArrayList<String>();

    l1.add("1");
    l1.add("2");
    l1.add("3");
    l1.add("4");
    l1.add("5");
    hmOne.put("secondkey", l1);

    HashMap<String, List<String>> hmTwo = new HashMap<String, List<String>>();
    List<String>l2 = new ArrayList<String>();
    l2.add("one");
    l2.add("two");
    l2.add("four");
    l2.add("five");
    hmTwo.put("firstkey", l2);
    l2 = new ArrayList<String>();

    l2.add("1");
    l2.add("3");
    l2.add("4");
    l2.add("5");
    hmTwo.put("secondkey", l2);

感谢您的任何帮助。

1
https://dev59.com/O3A75IYBdhLWcg3wRWyc#3387383 - jcbelanger
1
我编写了自己的比较函数。我将两个哈希表传递给它进行比较,然后返回第一个哈希表中有而第二个没有的内容,以及第二个哈希表中有而第一个没有的内容。 - Green
@Green 我知道已经过了一段时间,但你能否接受一个答案或者发布你自己的解决方案作为答案(最好)?问候。 - Gewure
4个回答

6

1
Guava还有Lists.newArrayList("1", "2", "3", "4", "5"),这将使原始代码比现在更短。 - Roland Illig

2
HashMap.equals方法可以告诉你两个HashMap是否相同(即键和值都相同),但其他的你需要自己实现。你需要迭代一个HashMap的keyset(),在另一个HashMap的keySet()中查找并比较值。
然后,你需要反过来,在第二个HashMap中查找第一个HashMap不存在的键。你可以使用Set方法来完成这个操作。

1
使用mapOne.entrySet()的方法更容易:.containsAll(mapTwo.entrySet())/.removeAll(mapTwo.entrySet())/.retainAll(mapTwo.entrySet()),而不是手动迭代。由于这些方法具有破坏性,因此可能需要使用mapOne的克隆。 - Christoffer Hammarström
@ChristofferHammarström,我提到了反转的设置方法,但没有提到第一个,因为还需要值比较。 - Miserable Variable
1
这就是为什么你要使用.entrySet()而不是.keySet()的原因。 - Christoffer Hammarström
抱歉,我之前眼瞎了。 - Miserable Variable

0

你知道Map的.equals()方法可以告诉你两个Map是否相等,对吧?

如果它们不相等,你就需要解析它们并自己找出差异。


0

从我的经验来看,你可以首先使用HashMap.equals()方法来判断它们是否不同,然后获取每个HashMap的keySet并进行比较:

在Java中比较两个集合的最快方法是什么?

然后,一旦你找到了键的差异,就可以对值集合重复这个过程。


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