以这些代码片段为例:
public int compareTo(DSA_Student C){
if (this.getName().compareTo(C.getName())<0) return -1;
else
if (this.getName().compareTo(C.getName())>0) return 1;
else return (new Integer(this.getStudentId()).compareTo(new Integer(C.getStudentId())));
}
在主要课程中:
SortedSet <DSA_Student> S1=new TreeSet<DSA_Student>();
DSA_Student a=new DSA_Student("A",10);
DSA_Student b=new DSA_Student("F",40);
DSA_Student c=new DSA_Student("B",49);
DSA_Student d=new DSA_Student("E",45);
DSA_Student e=new DSA_Student("D",30);
DSA_Student f=new DSA_Student("C",45);
DSA_Student g=new DSA_Student("B",45);
S1.add(a);
S1.add(b);
S1.add(c);
S1.add(d);
S1.add(e);
S1.add(f);
S1.add(g);
我想知道this.getName()和C.getName()是指什么,编译器如何知道它们是两个不同的对象,从而进行比较?
答案 0 :(得分:2)
this.getName()
表示获取自己对象的名称
C.getName()
表示获取对象c的名称
compareTo
方法用于将自身与传递的其他对象进行比较
Comparable
接口提供了方法声明,用于将自己的对象与其compareTo
方法中传递的其他对象进行比较。
更新:
正如您在使用可比较TreeSet
方法时询问compareTo
的工作机制一样,最好在内部查看TreeMap
的源代码TreeSet
添加对象时使用TreeMap
put方法。由于TreeSet将其元素保持在排序顺序中,因此只要TreeSet
中添加了元素,它就会排序。你可以拥有source code of TreeMap put method here。我仅提取了与使用put
Comparable
方法相关的compareTo
方法的相关实施:
if (key == null)
throw new NullPointerException();
// This is where it takes your custom comparable object
Comparable<? super K> k = (Comparable<? super K>) key; //
do {
parent = t;
// k as current object compareTo other object as
// t has been taken as root which changes
//its position based on comparsion
cmp = k.compareTo(t.key);
if (cmp < 0)
t = t.left;
else if (cmp > 0)
t = t.right;
else
return t.setValue(value);
} while (t != null);
由于我不是Java专家,我很乐意看到对我的更新有任何评论,以确保信息正确。