A veces necesito implementar un método hashCode() de obj combinando los hashCodes de sus varios miembros de instancia. Por ejemplo, si el obj combinacional tiene miembros a, b, c y, a menudo veo PPL implementarlo como¿Cuál es la forma preferida de implementar hashCode()?
int hashCode(){
return 31 * 31 * a.hashCode() + 31 * b.hashCode() + c.hashCode();
}
dónde viene este número mágico 31 viene? ¿Es la longitud de 4 bytes o solo un número primo?
¿Hay alguna otra forma preferida/estándar de implementar hashCode()?
Similar (pero no necesariamente duplicado): http://stackoverflow.com/questions/3613102/why-use-a-prime-number-in-hashcode –
El prime 31 se utiliza en String.hashCode() Esto hace un buen primer puesto ya que no hay muchos caracteres posibles diferentes, sin embargo tiendo a usar primos más grandes. Un buen sitio para primos "interesantes" es http://primes.utm.edu/curios/ –