Назад к вопросам
Junior — Middle
66
Каким образом можно реализовать основную версию метода hashCode в классе?
Ответ от нейросети
sobes.tech AI
Основная версия метода hashCode в Java должна обеспечивать равномерное распределение хешей и учитывать все значимые поля объекта, которые участвуют в сравнении через equals. Обычно реализуют так:
- Используют начальное не нулевое число, например 17 или 31.
- Для каждого значимого поля вычисляют его хеш (для примитивов — напрямую, для объектов — вызывают
hashCode(), учитывая null). - Итеративно комбинируют хеши полей с помощью умножения на простое число (часто 31) и сложения.
Пример реализации:
@Override
public int hashCode() {
int result = 17;
result = 31 * result + (field1 != null ? field1.hashCode() : 0);
result = 31 * result + field2;
result = 31 * result + (int) (field3 ^ (field3 >>> 32)); // для long
return result;
}
Такой подход минимизирует коллизии и соответствует контракту hashCode в Java.