Ответ
HashSet будет работать некорректно, так как его корректность зависит от правильной реализации методов equals() и hashCode().
Проблемы:
-
Нарушение логики уникальности: HashSet использует
equals()для проверки дубликатов. Если метод не переопределён, используется реализация изObject, которая сравнивает ссылки на объекты (==). Это означает, что два разных объекта с одинаковыми данными будут считаться разными и оба добавятся в набор, нарушая контрактSet.class BadKey { String value; // Нет переопределения equals/hashCode } Set<BadKey> set = new HashSet<>(); set.add(new BadKey("a")); set.add(new BadKey("a")); // Добавится! Два разных объекта. System.out.println(set.size()); // Выведет 2 -
Проблемы с поиском: Методы
contains()иremove()также полагаются наequals(). Невозможно будет найти или удалить объект, используя другой экземпляр с теми же данными.
Правило: Всегда переопределяйте equals() и hashCode() согласованно, если объекты этого класса будут использоваться как ключи в HashMap или элементы в HashSet.