Как сравниваются объекты в HashMap

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

Ответ

В HashMap объекты сравниваются по их хеш-коду (hashCode()) и через метод equals(). Сначала проверяется хеш-код ключа — если он совпадает, затем вызывается equals() для точного сравнения.

Пример:

class Key {
    String id;

    @Override
    public int hashCode() {
        return id.hashCode();
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null || getClass() != obj.getClass()) return false;
        Key key = (Key) obj;
        return id.equals(key.id);
    }
}

Важно: Если hashCode() для двух объектов одинаковый, но equals() возвращает false, они попадут в одну корзину (bucket), но будут храниться как разные записи (коллизия). Если equals() возвращает true, их хеш-коды обязаны совпадать.