hashCode() всегда возвращает 1 — что с этим не так? Будет ли HashMap работать корректно?

Если метод hashCode() всегда возвращает 1, это означает, что все объекты будут иметь одинаковый хэш-код.

Короткий ответ

Что ответить на собеседовании

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

Подробный разбор

Ответ с пояснениями

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

С точки зрения корректности, HashMap будет работать, но очень неэффективно. Основная идея хэширования — равномерно распределять объекты по корзинам, чтобы обеспечить быстрый доступ. Возврат одного и того же значения нарушает это.

Пример:

class BadHash {
    @Override
    public int hashCode() {
        return 1;
    }

    @Override
    public boolean equals(Object obj) {
        return this == obj;
    }
}

// При использовании в HashMap все объекты будут в одной корзине

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее