Почему при переопределении собственного хэш кода рекомендуют использовать значение 31?
кто может объяснить этот кусочек кода ?
я его видел в примерах но не совсем понимаю как работает такой хэш код
почему число 31 ? я смотрю в том числе и на английской версии сайта все пишут разные , кто то даже советует 73 потому что любимое число шелдона купера. народ, мне нужен ваш совет :)))
почему при переопределении собственного хэш кода рекомендуют использовать значение 31 ?
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + (int) re;
result = prime * result + (int) im;
return result;
}
Ответы (1 шт):
Множитель 31 выбран потому, что является простым нечётным числом. Если бы это было чётное число и при умножении произошло переполнение, информация была бы потеряна, поскольку умножение числа на 2 равнозначно его арифметическому сдвигу. Хотя преимущества от использования простых чисел не столь очевидны, именно их принято использовать для этой цели. Замечательное свойство числа 31 заключается в том, что умножение может быть заменено сдвигом и вычитанием для лучшей производительности:
31 * i == (i << 5) - i. Современные виртуальные машины автоматически выполняют эту небольшую оптимизацию.
Джошуа Блох "Java Эффективное программирование", глава 3, статья 9