hashCode 方法的最佳实现中的公认答案提供了一种看似不错的查找哈希码的方法。但我是哈希码的新手,所以我不太清楚该怎么做。
对于 1),我选择什么非零值是否重要?是否1
与其他数字(例如素数)一样好31
?
对于 2),我是否将每个值添加到 c?如果我有两个字段都是 a long
, int
,double
等怎么办?
我在这堂课上解释得对吗:
public MyClass{
long a, b, c; // these are the only fields
//some code and methods
public int hashCode(){
return 37 * (37 * ((int) (a ^ (a >>> 32))) + (int) (b ^ (b >>> 32)))
+ (int) (c ^ (c >>> 32));
}
}