Зачем нужен equals в HashMap

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

Ответ

Метод equals() в HashMap используется для сравнения ключей при поиске, вставке и удалении элементов. Если хеш-коды ключей совпадают (определяются hashCode()), equals() проверяет, действительно ли ключи одинаковые. Без корректной реализации equals() возможны коллизии и некорректное поведение.

Пример:

class Key {
    int id;

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

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

Если equals() не переопределён, сравнение будет по ссылке (==), и разные объекты с одинаковыми полями не будут считаться равными.