我在表单中有几个数组:
private static String[] patientNames = { "John Lennon", "Paul McCartney", "George Harrison", "Ringo Starr" };
Run Code Online (Sandbox Code Playgroud)
然后我像这样制作一个TreeSet:
TreeSet<Patient> patTreeSet = new TreeSet<Patient>();
Run Code Online (Sandbox Code Playgroud)
患者是另一类产生"患者"对象的人.然后我遍历我的数组中的每个元素来创建几个患者并将它们添加到我的patTreeSet喜欢这样:
for(int i = 0; i< patientNames.length; i++){
Date dob = date.getDate("MM/dd/yyyy", patientBirthDates[i]);
Patient p = new PatientImpl(patientNames[i], patientSSN[i], dob);
patTreeSet.add(p);
}
Run Code Online (Sandbox Code Playgroud)
但是当我去检查我的patTreeSet.size()时候它只返回"1" - 这是为什么?
我知道我的对象运行良好,因为当我尝试做同样的事情,但ArrayList相反,一切正常.所以我猜我正在使用TreeSet错误.
如果有帮助,Patient会有一个名为getFirstName()的方法,当我尝试执行以下操作时:
Iterator<Patient> patItr = patTreeSet.iterator();
while(patItr.hasNext()){
System.out.println(patItr.next().getFirstName());
}
Run Code Online (Sandbox Code Playgroud)
然后只有"John"打印,显然不应该这样......所以,我是否完全滥用TreeSet?
在此先感谢您的帮助!
编辑如下
================ PatientImpl Class ====================
public class PatientImpl implements Patient, Comparable{
Calendar cal = new …Run Code Online (Sandbox Code Playgroud) 为什么第三个对象没有被添加到树集中,虽然它是一个不同的?
import java.util.*;
class Student implements Comparable<Student>{
public String fn,ln;
public Student(String fn,String ln){
this.fn=fn;
this.ln=ln;
}
//overiding equals
public boolean equals(Object o) {
if (!(o instanceof Student))
return false;
Student s=(Student) o;
if(this==s)
return true;
if(this.fn.equals(s.fn) && this.ln.equals(s.ln))
return true;
return false;
}
//overiding hashcode
public int hashCode() {
return fn.hashCode()+ln.hashCode();
}
//overiding compareTo
public int compareTo(Student o) {
return this.fn.compareTo(o.fn);
}
}
public class Practice {
public static void main(String[] args) {
Student st1=new Student("Girish","J");
Student st2=new Student("Master","M"); …Run Code Online (Sandbox Code Playgroud) 这是写在所有的java像样的课程,如果你实现了Comparable接口,你应该(在大多数情况下)还覆盖equals以匹配其行为的方法.
不幸的是,在我目前的组织中,人们试图说服我完全相反.我正在寻找最有说服力的代码示例,向他们展示将要发生的所有邪恶.