我有这堂课:
public class Person {
private String id;
@Override
public boolean equals(Object obj) {
return obj instanceof Person &&
this.id.equals(((Person) obj).id);
}
@Override
public int hashCode() {
...
}
}
字段id
仅由数字组成。我的问题是,hashCode
方法应该是这样的:
@Override
public int hashCode() {
return id.hashCode();
}
或者这个:
@Override
public int hashCode() {
return Integer.parseInt(id);
}
提供id <= Integer.MAX_VALUE
。
答案 0 :(得分:2)
您应该将其保留为字符串的hashCode。
这有几个原因:
String.hashCode()
会在更多整数空间上分配哈希,而不仅仅是返回Integer.parseInt
Integer.parseInt
hashCode()
的费用
醇>
我在这里做的关键假设是你的id的值范围是'1' - '9999999',即不包括负整数,可能不包括 all 整数,否则你将无法添加新的id。
答案 1 :(得分:1)
委派所有对象的哈希码,包括在这种情况下。对于某些假设的性能问题,不值得使代码变得复杂,并且在这种特殊情况下,它会适得其反,因为标准实现会缓存哈希码。