Parfois, j'ai besoin d'implémenter une méthode hashCode() d'obj en combinant les hashCodes de ses plusieurs membres d'instance. Par exemple, si le combinatoires obj a des membres a, b, et c, je vois souvent ppl comme la mise en œuvreQuelle est la meilleure façon d'implémenter hashCode()?
int hashCode(){
return 31 * 31 * a.hashCode() + 31 * b.hashCode() + c.hashCode();
}
Où ce chiffre magique 31 vient? Est-ce la longueur de 4 octets ou juste un nombre premier?
Existe-t-il un autre moyen préféré/standard d'implémenter hashCode()?
Similaire (mais pas nécessairement en double): http://stackoverflow.com/questions/3613102/why-use-a-prime-number-in-hashcode –
Le prime 31 est utilisé dans String.hashCode() Cela rend un bon premier car il n'y a pas beaucoup de différents caractères possibles, mais j'ai tendance à utiliser des nombres premiers plus grands. Un bon site pour les nombres premiers "intéressants" est http://primes.utm.edu/curios/ –