Sobes.tech
Назад к вопросам
Junior — Middle
54

Что произойдет, если добавить объекты в HashSet, у которых не реализован метод equals()?

Компании, где спрашивали
Передовые Платежные Решения

Ответ от нейросети

sobes.tech AI

Если в Java объекты, добавляемые в HashSet, не переопределяют метод equals(), то будет использоваться реализация equals() из класса Object, которая сравнивает объекты по ссылке (т.е. два объекта считаются равными только если это одна и та же ссылка в памяти).

В результате HashSet будет считать разные экземпляры объектов разными элементами, даже если их внутренние данные идентичны. Это может привести к появлению дубликатов с точки зрения логики приложения.

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

Пример:

class Person {
    String name;

    Person(String name) {
        this.name = name;
    }
    // equals() и hashCode() не переопределены
}

HashSet<Person> set = new HashSet<>();
set.add(new Person("Alice"));
set.add(new Person("Alice"));

System.out.println(set.size()); // Выведет 2, хотя логически объекты одинаковы

Чтобы HashSet корректно работал с объектами, нужно переопределить equals() и hashCode() так, чтобы они учитывали значимые поля объекта.