Сравнение дубликатов Java HashSet - PullRequest
2 голосов
/ 03 марта 2011

У меня есть класс Person, который содержит String firstName, lastName.Я хочу вставить экземпляры этого класса в List, но я не хочу вставлять дубликаты.

Как использовать HashSet таким образом, чтобы он использовал что-то вроде firstName+lastName, чтобы выяснить,дубликаты?

Ответы [ 4 ]

10 голосов
/ 03 марта 2011

Вам нужен метод equals() и hashCode() в вашем классе Person.

equals() прост, а для hashCode() самое простое решение:

public int hashCode() {
  return Arrays.hashCode( new Object[] { firstName, lastName } );
}

Хотя, если ваш Person объект является неизменным (как и должно быть, если вы помещаете его в HashSet), вы должны кэшировать это значение.

3 голосов
/ 03 марта 2011

Вам нужно, чтобы ваш .equals() метод возвращал true для двух Person с одинаковыми именем и фамилией.Вам также необходимо реализовать метод .hashcode(), чтобы два одинаковых объекта имели одинаковый хэш-код.

Ваш вопрос касается использования List, а затем упоминает HashSet.Если важно сохранить порядок вставки, то HashSet - это не то, что вам нужно, вы должны использовать LinkedHashSet.

1 голос
/ 03 марта 2011

Важно -> Вам нужно реализовать равно и хэш-код

Всегда реализуйте оба. И они должны быть согласованы-> если 2 объекта равны, они должны иметь одинаковый хеш-код.

ЭТО ОЧЕНЬ ВАЖНО. ПРОЧИТАЙ ЗАНОВО. :)

HashSets и HashMaps используют хэш-код и равно для сравнения элементов. Разные элементы могут иметь одинаковый хеш-код, но они не равны

0 голосов
/ 03 марта 2011

Вы должны просто использовать Set вместо List. Если вы заботитесь о порядке ввода, используйте LinkedHashSet.

...