Sobes.tech
Middle — Middle+
60

Что произойдет, если класс, предназначенный для использования в качестве ключа в коллекции, имеет противоречащие определения методов equals и hashCode?

Companies where asked
Драйв Клик

Answer from AI

sobes.tech AI

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

Правила:

  • Если два объекта равны по equals, их hashCode должен быть одинаковым.
  • Если hashCode совпадает, объекты не обязательно равны, но equals должен это проверить.

Нарушение этих правил приводит к ошибкам при поиске, вставке и удалении элементов в хэш-структурах.

Пример:

class Key {
    int id;

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

    @Override
    public int hashCode() {
        return id; // корректно, так как зависит от id
    }
}