关于这个问题(Efficient hashCode() implementation),我还有一个问题。
我有一个“值”类,其实例保存在数据库中。因此,该类的实例都具有唯一的ID。
因此,我只需返回此id即可实现哈希码方法(以及相关的equals方法)。
当使用Eclipse哈希码生成器并告诉Eclipse仅使用ID属性进行生成时,我有以下方法:
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + id;
return result;
}
我认为简单地返回id更有效率,因为我知道这个id是唯一的。我是对的吗?
提前致谢
答案 0 :(得分:5)
这不是ID的唯一性,这使得这是正确的事情 - 它是用于等式检查的事实,它是用于等式检查的唯一的事物。
当您使用多个字段进行相等时,Eclipse中的样板实际上才是相关的。
答案 1 :(得分:3)
如果你的目标是身份唯一性那么绝对是的。
请记住,因为您(可能)不会通过哈希函数的可能范围(即int的所有值)随机分布您的值,对于依赖于哈希的任何代码而言,性能可能是一个问题均匀分布。
P.S。 “可能”来自我的假设,即这些唯一的int可能是你的数据库中的身份值。如果它们真的是随机分布的,请忽略我的警告。