qual é a maneira preferida de implementar hashCode ()?
Às vezes, eu preciso implementar o método hashCode () de um objeto combinando os hashCodes de seus vários membros da instância. Por exemplo, se o obj combinacional tem membros a, bec, geralmente vejo pessoas implementá-lo como
int hashCode(){
return 31 * 31 * a.hashCode() + 31 * b.hashCode() + c.hashCode();
}
De onde vem esse número mágico 31? É o comprimento de 4 bytes ou apenas um número primo?
Existe alguma outra maneira preferida / padrão de implementar o hashCode ()?