Коллекции trainee
Зачем переопределять hashCode и equals для ключа HashMap?
Ответ
HashMap использует hashCode для бакета и equals для разрешения коллизий. Если по умолчанию (Object) — каждый объект уникален, два «равных по смыслу» User'а с одинаковым id дадут разные hashCode, попадут в разные бакеты и не найдутся. Поэтому нужно переопределить оба метода согласованно, чтобы поиск по логически равному ключу работал.
Разбор: HashMap сначала по hashCode выбирает бакет, и только внутри бакета сравнивает ключи через equals; без переопределённого hashCode два смысловых дубликата попадут в разные бакеты и не найдутся. Ловушки: HashMap не перебирает все элементы и не сортирует по hashCode (это не TreeMap), а роли методов не перепутаны — бакет определяет именно hashCode.
Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.