【发布时间】:2013-01-16 21:01:40
【问题描述】:
我应该为自定义类 Person 实现 hashcode 和 equals。人包括
名字
姓
我应该实现 equals 和 hashcode,这样两个具有 firstname 和 lastname 的人应该为 equals 返回 true,并且应该被 Hashmap 接受。我已经实现了这样的 Person 类:
public class Person {
String firstname;
String lastname;
public Person(String firstname, String lastname) {
this.firstname = firstname;
this.lastname = lastname;
}
@Override
public int hashCode() {
// TODO Auto-generated method stub
return firstname.hashCode()+lastname.hashCode();
}
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
Person u=(Person) obj;
return u.firstname.equals(firstname) && u.lastname.equals(lastname);
}
}
这里Hashcode的实现是否正确?即使我得到了预期的结果,我想知道这个实现是否正确?
【问题讨论】:
-
如果 firstname 或 lastname 为 null,您的代码将不起作用
-
另外,只有当 firstname 和 lastname 相等且不为 null 时,equals 方法才返回 true。
-
在hashCode方面,我们会说它的好坏,而不是正确或错误。好的 hashCode() 意味着 hashmap 中发生冲突的可能性较小。