Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何删除HashSet中的重复项?_Java_Hashset - Fatal编程技术网

Java 如何删除HashSet中的重复项?

Java 如何删除HashSet中的重复项?,java,hashset,Java,Hashset,在下面的代码中,我在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","c

在下面的代码中,我在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);
}


}
publicstaticvoidmain(字符串[]args){
员工emp1=新员工(1,“sandhiya”,“cse”,22);
员工emp2=新员工(1,“sandhiya”,“cse”,22);
员工emp3=新员工(1,“sandhiya”,“cse”,22);
员工emp4=新员工(1,“sandhiya”,“cse”,22);
员工emp5=新员工(1,“sandhiya”,“cse”,22);
HashSet emps=新HashSet();
环境管理计划增补(环境管理计划1);
环境管理计划增补(环境管理计划2);
环境管理计划增补(环境管理计划3);
emps.add(emp4);
环境管理计划增补(环境管理计划5);
对于(员工e:emps){
System.out.println(e.id+“”+e.name+“”+e.department+“”+e.age);
}
}

需要设置equals方法。哈希集不应允许存在两个“相等”的对象


为Employee创建一个equals方法

需要设置equals方法。哈希集不应允许存在两个“相等”的对象


为Employee创建一个equals方法

哈希集使用哈希来比较对象


您必须为
员工
类定义
等于
哈希代码

哈希集使用哈希来比较对象


您必须为
Employee
类定义
equals
hashCode

您需要在
Employee
类中实现
hashCode()
equals()
方法。

您需要实现
hashCode()
equals())
方法在您的
员工
类中。

只要该方法没有重复,正确答案是:

如果你不想在一个集合中重复,你应该考虑为什么你使用一个允许重复的集合。删除重复元素的最简单方法是将内容添加到集合(不允许重复),然后将集合添加回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);
List al=new ArrayList();
//向al添加元素,包括重复项
Set hs=新的HashSet();
hs.addAll(al);
al.clear();
艾德尔(hs);
当然,这会破坏ArrayList中元素的顺序

如果希望保留订单,请参见LinkedHashSet


积分到:

只要没有重复,正确答案是:

如果你不想在一个集合中重复,你应该考虑为什么你使用一个允许重复的集合。删除重复元素的最简单方法是将内容添加到集合(不允许重复),然后将集合添加回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);
List al=new ArrayList();
//向al添加元素,包括重复项
Set hs=新的HashSet();
hs.addAll(al);
al.clear();
艾德尔(hs);
当然,这会破坏ArrayList中元素的顺序

如果希望保留订单,请参见LinkedHashSet


归功于:

哈希集可以自动处理它。您需要做的是重写Employee中的
hashCode
equal
方法,这将告诉HashSet如何确定两个对象相等。这里有一个例子。元素类必须实现一致的
.equals()
.hashCode()
操作。根据定义,HashSet将只包含唯一的元素。这里的问题是Employee类不重写HashCode,而是等于Object类的方法。HashSet可以自动处理它。您需要做的是重写Employee中的
hashCode
equal
方法,这将告诉HashSet如何确定两个对象相等。这里有一个例子。元素类必须实现一致的
.equals()
.hashCode()
操作。根据定义,HashSet将只包含唯一的元素。这里的问题是Employee类不重写HashCode,而是等于对象类的方法。而且还需要重写
HashCode
方法,还需要重写
HashCode
方法