Manchmal muss ich die hashCode() -Methode eines Objekts implementieren, indem ich die hashCodes seiner verschiedenen Instanzmitglieder kombiniere. wenn die kombinatorische obj Mitglieder a, b und c hat, habe ich oft siehe zum Beispiel ppl implementieren alsWas ist die bevorzugte Methode zur Implementierung von hashCode()?
int hashCode(){
return 31 * 31 * a.hashCode() + 31 * b.hashCode() + c.hashCode();
}
Woher kommt diese magische Zahl 31 kommen aus? Ist es die Länge von 4 Bytes oder nur eine Primzahl?
Gibt es eine andere bevorzugte/standard Art der Implementierung von HashCode()?
Ähnlich (aber nicht unbedingt doppelt): http://stackoverflow.com/questions/3613102/why-use-a-prime-number-in-hashcode –
Die Primzahl 31 wird in String.hashCode() verwendet Dies macht eine gute Primzahl, da es nicht viele verschiedene mögliche Zeichen gibt, jedoch neige ich dazu, größere Primzahlen zu verwenden. Eine gute Seite für "interessante" Primzahlen ist http://primes.utm.edu/curios/ –