В моем решении hash это сумма: длины строчки содержащей модель + год производства. Вроде бы удовлетворяет логике hash кода. Но в правильном решении пользуются готовым методом класса Oblects (уже почитал про него). Мое решение плохое?
Алексей
40 уровень
Решил, но остался вопрос.
Решен
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
АлексейExpert
7 апреля 2022, 21:50
Спасибо!
0
Марат ГариповExpert
7 апреля 2022, 20:39
насколько я могу судить, не видя ваш код, при определении хэш кода равным: сумма длины строчки содержащей модель + год производства, вы очень сильно жертвуете его уникальностью. быть может для решения данной задачи такой логики достаточно, но при большем количестве объектов хэш коды будут повторяться, а это коллизии, которых следует избегать)
Вот хорошая статья на эту тему.
https://javarush.com/groups/posts/2179-metodih-equals--hashcode-praktika-ispoljhzovanija
0
Павел Безумный учёный Expert
7 апреля 2022, 20:08
Использование для получения хэш-кода только длины строки сильно увеличивает вероятность появления двух одинаковых хэш-кодов у разных объектов. Например, автомобили марок Ford, Opel и Audi при описанной Вами реализации метода hashCode() будут иметь одинаковый хэш-код.
Строго говоря, вероятность появления одинаковых хэш-кодов есть всегда - ведь объектов может быть сколь угодно много, а диапазон возможных значений хэш-кода ограничен типом int. Такая ситуация не критична: в случае совпадения хэш-кодов объекты будут дополнительно проверены на идентичность при помощи метода equals(). Однако слишком частые вызовы этого метода могут существенно снизить быстродействие программы, поэтому по возможности следует максимально избегать появления дубликатов хэш-кодов.
Использование для генерации хэш-кода полной информации о строке позволяет разнообразить получаемые значения:
0