Java HashMap <string,list <string>&gt;()比较</string,list <string>

时间:2011-10-19 18:35:43

标签: java list collections hashmap

我想知道比较这两个HashMaps的最佳方法。我想验证它们是否相同,如果不相同,有什么区别。如果它很重要,那么我想知道第二个有/没有第一个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);

感谢您的帮助。

4 个答案:

答案 0 :(得分:6)

答案 1 :(得分:2)

HashMap.equals会告诉您它们是否相同(相同的键和值),但其余的则必须自行滚动。

您需要迭代一个keyset()的{​​{1}},在另一个的HashMap中查找它,如果找到则比较这些值。

然后,你必须反过来,寻找第二个不存在的第二个键。您可以使用keySet()方法。

答案 2 :(得分:0)

你知道地图的.equals() method会告诉你两个地图是否相等,对吗?

如果他们不平等,你将不得不解析他们两个并自己找出差异。

答案 3 :(得分:0)

在我的脑海中,您可以先使用HashMap.equals()来判断它们是否不同,然后获取每个hashmap的keySet并进行比较:

What is the fastest way to compare two sets in Java?

然后,一旦掌握了差异,就可以在价值集上重复这个过程。