Sobes.tech
Junior — Middle
87

Co się stanie, jeśli dodasz obiekty do HashSet, które nie mają zaimplementowanej metody equals()?

Firmy, w których zadano pytania
Передовые Платежные Решения

Odpowiedź od AI

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() так, чтобы они учитывали значимые поля объекта.