【发布时间】:2019-09-13 18:58:36
【问题描述】:
正如我所读到的,如果自定义对象需要成为 map 的键,则需要覆盖 hashcode 和 equals 方法,但在我的情况下,它可以在不覆盖它的情况下工作。有人可以告诉我出了什么问题吗?
Map<Student,Integer> map = new HashMap<>();
Student s1=new Student(1,"A");
Student s2=new Student(2,"B");
Student s3=new Student(3,"C");
map.put(s1,1);
map.put(s2,2);
map.put(s1,3);
for(Student s:map.keySet()) {
System.out.println(map.get(s) + "->" + s.id + " " +s.name);
}
正确的输出:
3-> 1A
2-> 2 B
【问题讨论】:
-
您正在重用同一个对象。
map.put(s1,1)和map.put(s1,3);所以 s1.equals(s1) 始终为真,即使没有覆盖equals方法 -
如果你想实例化两个相似的
Student对象并让它们被视为相等,那么你需要重写equals和hashCode。 -
谢谢@AntonBalaniuc
-
谢谢@khelwood
标签: java collections hashmap equals hashcode