我有两个哈希图,我只是想比较它们的密钥以及它们的值。
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()));
尽我所知:
上面的代码片段总是给我错误的。我只是想比较两张地图的值和键。请告诉我如何比较两张地图?
答案 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
该问题与该计划存在两个显着差异:
String
,而不是Student
。 String
有一个equals()
和一个hashCode()
,彼此一致并反映价值,而非实例,平等。java.util.HashMap
。问题计划使用Hashmap
。 HashMap
的{{1}}和equals()
互为一致,并遵循hashCode()
合同。我建议同时检查java.util.Map
和equals()
中hashCode()
和Student
的实施情况。
答案 3 :(得分:0)
不要忘记为Student class
实现hashCode + equals