Sobes.tech
Back to questions
Junior — Middle
57

Как поведет себя HashMap, если все объекты имеют одинаковый hashCode, равный константе?

Companies where asked
СБЕРСБЕР

Answer from AI

sobes.tech AI

Если все объекты в HashMap имеют одинаковый hashCode (например, константу), то все они будут попадать в одну и ту же корзину (бакет) внутренней структуры. В результате HashMap деградирует по производительности до связного списка (или дерева, если количество элементов в бакете превысит порог), и операции вставки, поиска и удаления будут иметь сложность O(n) вместо ожидаемой O(1).

Пример:

class BadHash {
    int value;
    BadHash(int value) { this.value = value; }
    @Override
    public int hashCode() { return 42; } // константный хэш
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof BadHash)) return false;
        return this.value == ((BadHash) o).value;
    }
}

Map<BadHash, String> map = new HashMap<>();
map.put(new BadHash(1), "one");
map.put(new BadHash(2), "two");
// Все элементы будут в одном бакете, что замедлит операции.