Как считается hashCode в Map

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

Ответ

В Java hashCode() используется для определения бакета (корзины) в HashMap. По умолчанию Object.hashCode() возвращает уникальный хеш на основе адреса памяти, но его можно переопределить.

Правила:

  1. Если a.equals(b) == true, то a.hashCode() == b.hashCode().
  2. Обратное не обязательно верно (коллизии).

Пример:

@Override
public int hashCode() {
    return Objects.hash(name, age); // Использует поля для хеша
}

В HashMap хеш модифицируется для равномерного распределения:

static final int hash(Object key) {
    int h;
    return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}

Это снижает коллизии при работе с таблицей.