Что такое hashCode у Object в Java

«Что такое hashCode у Object в Java» — вопрос из категории Java, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

hashCode() — это метод класса Object, возвращающий целочисленное значение (хэш-код), которое используется в хэш-коллекциях (HashMap, HashSet и т.д.) для быстрого поиска объектов.

Основные правила:

  1. Если equals() возвращает true для двух объектов, их hashCode() должен быть одинаковым.
  2. Обратное не обязательно: разные объекты могут иметь одинаковый хэш (коллизия).
  3. Хэш-код должен быть стабильным (не меняться, если объект не изменен).

Пример:

@Override
public int hashCode() {
    int prime = 31;
    int result = 1;
    result = prime * result + (field1 == null ? 0 : field1.hashCode());
    result = prime * result + (field2 == null ? 0 : field2.hashCode());
    return result;
}

Используется 31, так как это простое число, а умножение на него можно оптимизировать (31 * x = (x << 5) - x).