Как удалить дубликаты в HashSet?

В приведенном ниже коде я добавил 5 объектов с одинаковыми данными в хэш-наборе, и я хочу удалить объект с повторяющимися данными и распечатать данные объекта, которые отличаются друг от друга.

public static void main(String[] args) {
Employee emp1 = new Employee(1,"sandhiya","cse",22);
Employee emp2 = new Employee(1,"sandhiya","cse",22);
Employee emp3 = new Employee(1,"sandhiya","cse",22);
Employee emp4 = new Employee(1,"sandhiya","cse",22);
Employee emp5 = new Employee(1,"sandhiya","cse",22);
HashSet<Employee> emps = new HashSet<Employee>();
emps.add(emp1);
emps.add(emp2);
emps.add(emp3);
emps.add(emp4);
emps.add(emp5);
for(Employee e: emps){
    System.out.println(e.id + " "+e.name+" "+e.department+ " "+e.age);
}


}

HashSet может обрабатывать это автоматически. Что вам нужно сделать, так это переопределить методы hashCode и equal в Employee, которые сообщат HashSet, как определить, что два объекта равны. stackoverflow.com/questions/2265503/… Вот пример. tutorials.jenkov.com/java-collections/hashcode-equals.html

xingbin 04.10.2018 15:20

Класс вашего элемента должен реализовывать согласованные операции .equals() и .hashCode().

Pointy 04.10.2018 15:20

По определению HashSet будет содержать только уникальные элементы. Проблема здесь в том, что класс Employee не переопределяет методы HashCode и Equals класса Object.

dbl 04.10.2018 15:20
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
7 762
4

Ответы 4

Ваш метод equals должен быть установлен. Хэш-набор не должен допускать существования двух «равных» объектов.

Создайте метод равенства для Employee.

А также метод hashCode необходимо переопределить

Ivan 04.10.2018 15:21

HashSet использует хеш для сравнения объектов.

Вы должны определить equals и hashCode для вашего класса Employee.

Вам необходимо реализовать методы hashcode() и equals() в вашем классе Employee.

Если это не дублируется, правильный ответ:

Если вам не нужны дубликаты в Коллекции, вам следует подумать, почему вы используете Коллекцию, которая допускает дублирование. Самый простой способ удалить повторяющиеся элементы - добавить содержимое в Set (что не допускает дублирования), а затем снова добавить Set в ArrayList:

List<String> al = new ArrayList<>();
// add elements to al, including duplicates
Set<String> hs = new HashSet<>();
hs.addAll(al);
al.clear();
al.addAll(hs);

Конечно, это нарушает порядок элементов в ArrayList.

См. Также LinkedHashSet, если вы хотите сохранить порядок.

Кредиты для: Джонатан-Стаффорд - ответ здесь

Другие вопросы по теме