TGViewer
Java Java @javatg · 16.8K subscribers
Post #2325 2.01K
💡 Java: переопределяешь `equals()` - переопредели и `hashCode()`

Два объекта с одинаковым email могут быть равны по equals(), но HashSet.contains() при этом вернёт false.

Причина: HashSet и HashMap сначала используют хеш, чтобы определить, где искать объект, а затем проверяют равенство. Если хеши различаются, до equals() дело может не дойти.

Правило: равные объекты обязаны иметь одинаковый `hashCode()`. При этом одинаковый хеш не гарантирует равенство - коллизии допустимы.

В примере на картинке равенство определяется по email, поэтому хеш тоже вычисляется по нему.

И ещё: не меняйте поля, участвующие в `equals()` и `hashCode()`, пока объект хранится в `HashSet` или используется как ключ `HashMap` - поиск может перестать его находить.

#Java #OOP
  • 👍 4
  • ❤ 3
  • 🎉 1
More from @javatg
  1. Sep 19, 2026🚀 JetBrains обновила roadmap Kotlin: главный фокус - Multiplatform, Wasm и удобство разра…
  2. Sep 17, 2026Apache Kafka курс 2026: бесплатный курс по Kafka с нуля до профи на русском Kafka обучение…
  3. Sep 15, 2026🚀 Spring Boot 4 получил отдельный starter для RestClient Теперь imperative HTTP-клиент мо…
  4. Sep 15, 2026🎸 Приглашаем на Java Rock Star Meetup Самая ламповая встреча Java-коммьюнити состоится уж…
  5. Sep 14, 2026💡 Java: Checked vs Unchecked Exceptions, коротко и по делу В Java исключения делятся на д…
  6. Sep 13, 2026🚀 Spring Boot 4 получил полноценную поддержку Kotlin Serialization Теперь для kotlinx.ser…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →