При том, как вы сейчас настроили метод equals(Note)
, он (почти) никогда не вернет true
.При работе с String
объектами вы всегда должны использовать equals(String)
, никогда ==
.
Я бы создал свой метод Note.equals(Note)
примерно так:
@Override
public boolean equals(Object obj){
if(obj instanceof Note) {
Note target = (Note) obj;
if(name.equals(target.name) && friends.containsAll(target.friends)
&& friends.size() == target.friends.size()){
return true;
}
}
return false;
}
Вы заметитечто метод equals(Note)
, который я предоставил выше, также не делает friends.equals(target.getFriends())
.Это потому, что вы сравниваете содержащий HashSet
, а не содержимое HashSet
.
Наконец, если вы хотите, чтобы ваш Note
класс хэшировался правильно, вам также потребуется переопределить ваш hashCode()
метод.Подробнее об этом контракте можно прочитать в описании метода hashCode()
в документации Object
.
public int hashCode() {
return name.hashCode() + friends.hashCode();
}