Implementación eficiente de hashCode ()

A menudo auto-genero una clasehashCode() Método que utiliza IntelliJ IDEA y normalmente el método toma la forma:

result = 31 * result + ...

Mi pregunta es ¿cuál es el propósito de multiplicar por 31? Sé que este es un número primo, pero ¿por qué elegir 31 específicamente? Además, si se implementa unhashCode() ¿Para un conjunto de datos particularmente pequeño / grande, las personas abordarían este problema de manera diferente?

Respuestas a la pregunta(1)

Su respuesta a la pregunta