我有一个Doctor对象,每个对象都有一个唯一的属性“ docMobile”(主键)。我制作了两个医生的 LinkedHashSets (doctorsByLoc和doctorsByAvail)。现在当我做一个
doctorsByLoc.retainAll(doctorsByAvail)
在两个集合上,即使它们具有相同的医生,它也会删除所有元素。
我在我的医生类中实现了hashCode()方法。我还单独打印了这些集合,以检查集合中是否包含相同的元素。
public class Doctor{
String docName;
long docMobile;
String docLocation;
int docDays;
@Override
public int hashCode() {
return Long.hashCode(docMobile);
}
}
然后在servlet中的某个地方发生这种情况
public static void main(String[] args){
Set<Doctor> doctorsByLoc = new LinkedHashSet<>();
Set<Doctor> doctorsByAvail = new LinkedHashSet<>();
doctorsByLoc.add(d1);
doctorsByLoc.add(d2);
doctorsByLoc.add(d3);
doctorsByAvail.add(d1);
doctorsByAvail.add(d2);
doctorsByAvail.add(d3);
System.out.println("Before retain All "+doctorsByLoc.size());
for(Doctor d:doctorsByLoc){
System.out.println(d.getdocName());
}
doctorsByLoc.retainAll(doctorsByAvail);
System.out.println("After retain All"+doctorsByLoc.size());
for(Doctor d:doctorsByLoc){
System.out.println(d.getdocName());
}
}
Actual output:
Before retain All 3
d1's name
d2's name
d3's name
After retain All 0
我该如何解决我的哈希码方法,以便医生留下来。 我曾尝试在返回之前打印出哈希码,然后得到了一对类似的哈希码作为输出。
答案 0 :(得分:3)
您没有正确覆盖equals
。您应该按如下所示对其进行覆盖:
@Override
public boolean equals (Object other) // Not "Doctor other"
{
// implementation here
}