В приведенном ниже коде я добавил 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);
}
}
Класс вашего элемента должен реализовывать согласованные операции .equals() и .hashCode().
По определению HashSet будет содержать только уникальные элементы. Проблема здесь в том, что класс Employee не переопределяет методы HashCode и Equals класса Object.




Ваш метод equals должен быть установлен. Хэш-набор не должен допускать существования двух «равных» объектов.
Создайте метод равенства для Employee.
А также метод hashCode необходимо переопределить
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, если вы хотите сохранить порядок.
Кредиты для: Джонатан-Стаффорд - ответ здесь
HashSet может обрабатывать это автоматически. Что вам нужно сделать, так это переопределить методы
hashCodeиequalв Employee, которые сообщат HashSet, как определить, что два объекта равны. stackoverflow.com/questions/2265503/… Вот пример. tutorials.jenkov.com/java-collections/hashcode-equals.html