class R implements Comparable
{
int count;
public R(int count)
{
this.count = count;
}

public boolean equals(Object obj)
{
if (obj instanceof R)
{
R r = (R)obj;
if (r.count == this.count)//这里r.count代表 需要比较的对象的count值,this.count代表当
{      //前对象的count值      可是我始终无法理解这两个的含义    麻烦哪位结合①②③
return true;//帮我细细分析一下(当程序执行到①时 需要比较的对象 和 当前对象                      //分别是什么?执行到②?执行到③?)   谢谢
}
}
return false;
}
public int compareTo(Object obj)
{
R r = (R)obj;
if (this.count > r.count)
{
return 1;
}
else if (this.count == r.count)
{
return 0;
}
else
{
return -1;
}
}
}
public class TestTreeSet2
{
public static void main(String[] args) 
{
TreeSet ts = new TreeSet();
ts.add(new R(5));①
ts.add(new R(-3));②
ts.add(new R(9));③



}
}

解决方案 »

  1.   

    this 就是调用方法的 对象,有的语言里等价的称呼是self。
      

  2.   

    this就是指向当前对象,也称为自身的,在C++中this就相当于是指针
      

  3.   

    这个一个参数的equals是由某一个对象来调用的,
    比如你现在有一个对象o1,你想和另一个对象o2比较是否相等(这个相等可以自定义规则,但是不能违反一些原则)。即采用如下的调用方式:
    o1.equals(o2)
    如果硬翻译成中文的话,就好像:我现在持有对象o1,与o2比较。既然o1做为你现在持有的对象,那么你在equals里想用o1的属性或方法时,就要是用this,如this.p1,它表示“当前对象”的属性p1。那么谁是“当前对象”呢,就是调用方法的对象。
      

  4.   

    至于那个TreeSet嘛,因为它是Set,所以里面不能有重复元素的,即每次add元素时,都要调用equals查看是否已经有了相等的元素,表面上你add了就行了,比较是类库做的,所以你看不出来。要是说的白一点(当然可能有好多高手就说了:“你这样说不准确,我们不爱听”,不管他们):
    就是如果你用对象调用了一个方法,如:obj.m()。
    那么感觉上就是obj做了一个动作,这个动作是m,那么m中的this,也就是当前对象,自然是做动作的那个家伙,也就是obj了
      

  5.   

    R current = new R(9);
            
            R r5 = new R(5);
            R r3 = new R(-3);
            R r9 = new R(9);
            
            System.out.println(current.equals(r5));
            System.out.println(current.equals(r3));
            System.out.println(current.equals(r9));
    你override了equals()方法,但是在你的main方法中没有调用该方法,该方法不会执行。修改main方法为如上代码。在创建current对象时传的参数为9,此时会调用有一个参数的构造方法public R(int count),在构造方法中会将9赋值给本对象中的count变量,即current对象中的count。
    对象r5、r3、r9与current类似。当调用current.equals(r5)时,public boolean equals(Object obj);时r5被当做参数传递进去。此时current中的count变量为this.count,因为是调用的current的equals方法,
    即this.count此时为9,obj.count的值为5,然后比较两个count值,不相等返回false。r3、r9与r5类似。只是r9时r9的count值与current的count相等,返回true。
      

  6.   

    if (r.count == this.count)//这里r.count代表 需要比较的对象的count值,this.count代表当
    { //前对象的count值 可是我始终无法理解这两个的含义 麻烦哪位结合①②③
    return true;//帮我细细分析一下(当程序执行到①时 需要比较的对象 和 当前对象 //分别是什么?执行到②?执行到③?) 谢谢ts.add(new R(5));①
    执行到①,集合里只有一个元素,所以没有发生比较,所以不调用equals,也不调用compareTots.add(new R(-3));②
    执行到②,集合里有两个元素,发生比较,会调用compareTo方法(不调用equals方法),当前元素是new R(-3),和当前元素比较的r是①添加的元素,这里会排好序,R(-3)排在前,R(5)排在后ts.add(new R(9));③
    执行到③,集合里有3个元素,发生比较,会调用compareTo方法(不调用equals方法),当前元素是new R(9),和当前元素比较的r是②中排在后的元素,联合从上面的代码就是①添加的元素,然后排序,R(9)排在R(5)之后,因为compareTo方法决定的9大于5,这里面Lz如果细心的话会发现,如果R(9)排在R(5)前面的,会发生什么情况?那就是R(9)会继续和排在R(5)前面的元素比较,那么当前对象还是R(9),和R(9)比较的是排在R(5)前面的元素R(-3),等等,依此类推所以,总结,当发生add的时候,当前对象就是被add的对象,比较的对象r就是排好序的最后一个对象,如果当前对象比排好序的最后一个对象“大”,那么比较到此结束,否则,就继续和排好序的倒数第2个,第3个等等比较,直到当前对象比某个对象“大”或排在最前面(如果没有对象比它“大”)为止。