Согласно документации Java, хеш-код для объекта String
вычисляется как:
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
используя
int
арифметику, гдеs[i]
- i- й символ строки,n
- длина строки, а^
возведение в степень.
Почему 31 используется в качестве множителя?
Я понимаю, что множитель должен быть относительно большим простым числом. Так почему бы не 29, или 37, или даже 97?