如何比较两个地图的entrySet

时间:2014-05-12 09:54:52

标签: java collections

我有两个哈希图,我只是想比较它们的密钥以及它们的值。

Student stu1=new Student(1, "student_1_Name");
Student stu2=new Student(2, "student_2_Name");

Map<Integer, Student> map1= new Hashmap<Integer, Student>();
Map<Integer, Student> map2= new Hashmap<Integer, Student>();

map1.put(1, stu1);
map2.put(2, stu2);

System.out.println("is there any diff.==="+map1.entrySet().equals(map2.entrySet()));

尽我所知:

  • map.keySet():给出地图的键
  • map.values():给出地图的值
  • map.entrySet():给出键和值。

上面的代码片段总是给我错误的。我只是想比较两张地图的值和键。请告诉我如何比较两张地图?

4 个答案:

答案 0 :(得分:2)

条目集的等于和哈希码将比较Map实现本身的实例,而不是元素。

正常机制是迭代比较键或值的条目集,如下所示:

for (Map.Entry<String, String> entry : map.entrySet())
{
    System.out.println(entry.getKey() + "/" + entry.getValue());
    myBoolean = entry.getKey().equals(myOtherString);
}

答案 1 :(得分:0)

您必须迭代集合。例如:

private boolean isEqual(map1, map2){
  for (Integer i : map1.keySet())
    if(map2.contains(i))
      if(! map1.get(k).equlas(map2.get(k)))
        return false;
    else return false;
  return true;
}

答案 2 :(得分:0)

这个程序:

import java.util.HashMap;
import java.util.Map;

public class Test {
  public static void main(String[] args) {
    Map<Integer, String> map1 = new HashMap<Integer, String>();
    Map<Integer, String> map2 = new HashMap<Integer, String>();
    map1.put(2, "bbb");
    map1.put(1, "aaa");
    map2.put(1, "aaa");
    map2.put(2, "bbb");
    System.out.println(map1.entrySet().equals(map2.entrySet()));
    System.out.println(map1.equals(map2));
  }
}

打印

true
true

该问题与该计划存在两个显着差异:

  1. 我使用的是String,而不是StudentString有一个equals()和一个hashCode(),彼此一致并反映价值,而非实例,平等。
  2. 我使用了java.util.HashMap。问题计划使用HashmapHashMap的{​​{1}}和equals()互为一致,并遵循hashCode()合同。
  3. 我建议同时检查java.util.Mapequals()hashCode()Student的实施情况。

答案 3 :(得分:0)

不要忘记为Student class

实现hashCode + equals