Нет, использовать случайные числа в методе hashcode() недопустимо. Такой подход нарушает основной контракт метода hashCode() в Java.
Метод hashcode() должен следовать критическому правилу: один и тот же объект должен всегда возвращать одно и то же значение хеша во время выполнения приложения. Случайные числа напрямую противоречат этому требованию.
HashMap, HashSet и Hashtable полагаются на стабильные хеш-коды для сохранения и получения объектовhashCode() и equals()Если ты реализуешь hashcode() со случайными числами:
// НЕПРАВИЛЬНО - НЕ ДЕЛАЙ ТАК
@Override
public int hashCode() {
return new Random().nextInt(); // Плохая практика
}
Один и тот же объект будет возвращать разные хеш-коды при каждом вызове, из-за чего объекты будут «теряться» в коллекциях, а поведение кода станет непредсказуемым.
Хеш-коды должны основываться на неизменяемых или фактически неизменяемых полях объекта. Используй поля, которые определяют идентичность объекта:
@Override
public int hashCode() {
return Objects.hash(field1, field2, field3);
}
Убедись, что твоя реализация hashCode() детерминирована, стабильна и согласована с реализацией метода equals().
Хэш-код объекта должен возвращать одно и то же значение каждый раз при вызове во время выполнения приложения, поэтому случайные числа несовместимы с контрактом hashCode().
Новый — ещё не проверен сообществом
Вы