有時我需要通過組合其多個實例成員的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