有时我需要通过组合其多个实例成员的hashCode来实现obj的hashCode()方法。例如,如果组合的obj拥有成员,B和C,我经常看到PPL实现它作为实现hashCode()的首选方式是什么?
int hashCode(){
return 31 * 31 * a.hashCode() + 31 * b.hashCode() + c.hashCode();
}
来自哪里这个神奇的数字31?它是4字节的长度还是只是一个素数?
是否有任何其他的首选/标准方式实现hashCode()?
类似(但不一定重复):http://stackoverflow.com/questions/3613102/why-use-a-prime-number-in-hashcode – 2010-10-06 03:24:13
质量31用于String.hashCode()这使得一个好的素数,因为没有太多可能的角色,但是我倾向于使用更大的素数。因为我只是无耻地引用了布洛赫,所以“有趣”素数的好网站是http://primes.utm.edu/curios/ – 2010-10-06 05:57:58