当使用Comparable接口比较两个对象时,this.method变量与object.method有何不同?

时间:2017-03-05 20:18:56

标签: java data-structures comparable compareto

以这些代码片段为例:

 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()是指什么,编译器如何知道它们是两个不同的对象,从而进行比较?

1 个答案:

答案 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专家,我很乐意看到对我的更新有任何评论,以确保信息正确。