Навіщо перевизначати equals() і hashCode() разом?
Приклад відповіді
Контракт вимагає: якщо два об'єкти рівні за equals(), у них має бути однаковий hashCode(). Колекції на основі хешів (HashMap, HashSet) спочатку шукають кошик за хешем, а потім порівнюють через equals().
Якщо перевизначити лише equals(), два «рівні» об'єкти потраплять у різні кошики, і HashSet міститиме дублікати. Для простих носіїв даних у сучасній Java зручно використовувати record — він генерує обидва методи автоматично.