Согласно контракту на набор в Java, "недопустимо, чтобы набор содержал себя как элемент" (источник). Однако это возможно в случае HashSet объектов, как показано здесь:
Set<Object> mySet = new HashSet<>();
mySet.add(mySet);
assertThat(mySet.size(), equalTo(1));
Это утверждение проходит, но я ожидаю, что поведение будет либо иметь результирующее множество 0 или выбросить исключение. Я понимаю, что базовая реализация HashSet - это HashMap, но похоже, что перед добавлением элемента, чтобы избежать нарушения этого контракта, нет необходимости проверять равенство?