мой HashSet содержит (многозначно эквивалентные) дубликаты! - PullRequest
2 голосов
/ 08 мая 2011

Я переопределил методы hashCode () и equals () в моем классе Person, так что два объекта Person с одинаковым именем (строка) будут рассматриваться как равные, но мой набор все еще содержит двух людей с одинаковым именем ,

Вот код из моего класса Person:

public boolean equals(Person aPerson) {
    Person p = (Person) aPerson;
    //Since name is a String, we can just use
    //the overridden equals() method to ask
    //one name if it's equal to the other
    //person's name.
    return getName().equals(p.getName());
}

public int hashCode() {
    //Strings also have an overridden hashCode() method
    //so we can just return the result of calling hashCode()
    //on the name (instead of the object!)
    return name.hashCode();
}

Ответы [ 2 ]

7 голосов
/ 08 мая 2011

Ваш equals метод не переопределяет Object.equals(<b>object</b>), поскольку он принимает Person в качестве параметра.

Чтобы избежать этой проблемы, всегда добавляйте аннотацию @Override при переопределении метода.
Таким образом, вы получите ошибку, если у вас неверные параметры.

0 голосов
/ 08 мая 2011

Был ли добавлен дубликат объекта персонажа, когда он был эквивалентен, или объект персоны был добавлен, когда он не был дубликатом, а затем изменен так, чтобы он был дубликатом?Последний случай не определен для java.util.Set.

rc

...