TGViewer
Java: fill the gaps Java: fill the gaps @java_fillthegaps · 12.3K subscribers
Post #359 6.65K
Как написать hashcode лучше, чем IDE

Метод hashcode используется, когда класс работает в качестве ключа в hash-based структурах данных. Следить за тем, как используется класс, не всегда удобно, поэтому есть правило — "Переопределяешь equals — переопредели hashcode".

Метод должен соблюдать контракт:

⭐️ Если объект не меняется, хэшкод остаётся постоянным
⭐️ У одинаковых объектов одинаковый хэшкод
⭐️ Если хэшкод одинаковый, то объекты не обязательно равны

Писать equals и hashcode вручную долго, поэтому часто используется автогенерация в IDE или Lombok аннотация @EqualsAndHashCode. Они создают что-то вроде

public int hashcode() {
return Objects.hash(id, param1, param2);
}

Что не так?

Контракт соблюдается, но суть хэшкода пропадает.

Хэшкод — это быстрая проверка без лишних вычислений. В коде выше результат вычисляется каждый раз на основе множества полей. А по количеству операций Objects.hashcode догоняет equals.

Как считать хэш быстрее:

1️⃣ Использовать одно поле

public int hashcode() {
return id;
}

2️⃣ Сохранять результат в отдельном поле

Подойдёт если у объекта нет id, и основные поля не меняются. Так сделано в классе String:

private int hash;

public int hashCode() {
int h = hash;
if (h==0 && !hashIsZero){
hash = …;
}
return h;
}

Эффект от оптимизации будет заметен, если класс активно участвует в hash-based структурах. В остальных случаях можно оставить автогенерацию.
  • 👍 53
  • 🔥 12
  • ❤ 7
More from @java_fillthegaps
  1. Apr 30, 2026Get Your Hands Dirty on Clean Architecture: отзыв на книгу Когда я подняла тему чистой арх…
  2. Apr 27, 2026​Clean Architecture: отзыв на книгу Наконец-то дочитала книгу Clean Architecture Роберта М…
  3. Mar 4, 2026Как переиспользовать контекст в интеграционных тестах Сегодня расскажу базовый минимум для…
  4. Mar 4, 2026Post #660
  5. Mar 4, 2026Тестовый контекст поднимается 2 минуты. У нас 4 класса с интеграционными тестами, их конфи…
  6. Feb 25, 2026Чистая архитектура. Главы 3-5 Продолжаем спидран по Clean Architecture Роберта Мартина. ⭐️…
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 →