Implementação eficiente de hashCode ()

Eu geralmente gero automaticamente uma classehashCode() método usando IntelliJ IDEA e normalmente o método assume a forma:

result = 31 * result + ...

Minha pergunta é qual é o propósito de multiplicar por 31? Eu sei que este é um número primo, mas por que escolher 31 especificamente? Além disso, se implementar umahashCode() para um conjunto de dados particularmente pequeno / grande, as pessoas abordariam esse problema de maneira diferente?

questionAnswers(1)

yourAnswerToTheQuestion