【发布时间】:2010-10-06 03:06:28
【问题描述】:
有时我需要通过组合它的几个实例成员的 hashCodes 来实现一个 obj 的 hashCode() 方法。例如,如果组合 obj 有成员 a、b 和 c,我经常看到 ppl 将其实现为
int hashCode(){
return 31 * 31 * a.hashCode() + 31 * b.hashCode() + c.hashCode();
}
这个神奇的数字 31 是从哪里来的?是 4 字节的长度还是只是一个素数?
还有其他首选/标准的方式来实现 hashCode() 吗?
【问题讨论】:
-
类似(但不一定重复):stackoverflow.com/questions/3613102/…
-
在 String.hashCode() 中使用素数 31 这是一个很好的素数,因为可能的字符不多,但是我倾向于使用更大的素数。 “有趣”素数的好网站是primes.utm.edu/curios