【发布时间】:2015-07-26 07:49:26
【问题描述】:
在一次采访中,有人要求我以一种有效的方式展示 hashcode 和 equals 方法的实现,所以我构建了下面的 pojo,但面试官说这不是正确和最好的实现,因为它可能导致碰撞,请您告知以下哈希码的实现是否正确
public class Emp {
String name, job;
int salary;
public Emp(String n, String j, int s) {
this.name = n;
this.job = j;
this.salary = s;
}
public int hashcode() {
return name.hashCode() + job.hashCode() + salary;
}
public boolean equals(Object o) {
Emp e1 = (Emp) o;
return this.name.equals(e1.name) && this.job.equals(e1.job) && this.salary == e1.salary;
}
}
【问题讨论】:
-
如果这些值之一为空会发生什么?如果传入 equals() 的对象不是 Emp 的实例会怎样?
-
@KevinWorkman 谢谢是的,我同意我没有想到这些情况,你能告诉我如何自己处理这些情况