Ответ
class Dog {
String breed;
String name;
Dog(String breed, String name) {
this.breed = breed;
this.name = name;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Dog dog = (Dog) o;
return Objects.equals(breed, dog.breed);
}
@Override
public int hashCode() {
return Objects.hash(breed);
}
}
В HashSet останется 2 объекта:
- Dog("shepherd", "Joe") или Dog("shepherd", "Henry") (один из них, так как equals/hashCode сравнивают только breed)
- Dog("sharik", "") (уникальный breed)
HashSet использует equals() и hashCode() для определения уникальности. Так как у первых двух собак одинаковый breed "shepherd", второй объект перезапишет первый. Третья собака с breed "sharik" будет добавлена как уникальный элемент.