Я прошел через add метод HashSet. Отмечено, что
Если этот набор уже содержит элемент, вызов оставляет неизменным и возвращает false.
Но метод add внутренне сохраняет значения в HashMap
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
В методе put HashMap указано, что
Связывает указанное значение с указанным ключом на этой карте. Если ранее карта содержала отображение для ключа, старое значение заменяется.
Итак, если метод put HashMap заменяет старое значение, как метод HashSet add оставляет набор неизменным в случае повторяющихся элементов?