Sobes.tech
Junior — Middle
115

¿Cómo se comportará HashMap al agregar un elemento con valor null, si el método hashCode siempre devuelve el mismo número?

Empresas donde se preguntó
Ifellow

Respuesta de la IA

sobes.tech AI

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

При добавлении элемента с null значением (то есть значение может быть null, ключ — не обязательно), HashMap нормально это обработает, так как значения могут быть null. Ключ же с одинаковым hashCode будет помещён в одну корзину, и при коллизиях HashMap сравнивает ключи методом equals().

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

Пример:

class Key {
    private String id;

    public Key(String id) {
        this.id = id;
    }

    @Override
    public int hashCode() {
        return 42; // всегда одно и то же число
    }

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

HashMap<Key, String> map = new HashMap<>();
map.put(new Key("a"), null); // значение null допустимо
map.put(new Key("b"), "value");

// Все ключи с hashCode=42 попадут в одну корзину, что ухудшит производительность.

Таким образом, HashMap корректно работает с такими ключами, но эффективность снижается из-за коллизий.