【发布时间】:2018-10-04 13:16:52
【问题描述】:
在下面的代码中,我在哈希集中添加了 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 可以自动处理。你需要做的是覆盖Employee中的
hashCode和equal方法,它会告诉HashSet如何判断两个对象是否相等。 stackoverflow.com/questions/2265503/… 这是一个例子。 tutorials.jenkov.com/java-collections/hashcode-equals.html -
您的元素类必须实现一致的
.equals()和.hashCode()操作。 -
根据定义 HashSet 将只包含唯一元素。这里的问题是Employee类没有覆盖Object类的HashCode和Equals方法。