public class Person1 implements Comparable {
private final int id;
private String name;
private int age;

Person1(int id,String name,int age){
this.id=id;
this.name=name;
this.age=age;
}
public int getId(){
return id;

}
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age=age;
}
public int getAge(){
return age;
}
public int compareTo(Object o){
Person1 p=(Person1)o;
return this.id-p.id;
}
public boolean equals(Object o){
boolean flag=false;
if(o instanceof Person1){
if(this.id==((Person1)o).id){
flag=true;
}else
flag= false;
}
return flag;
}
public String toString( ){
return this.id+" "+this.name+" "+this.age;
}
}
import java.util.Iterator;
import java.util.TreeSet;
public class TestComparable {
public static void main(String[] args) {
Person1 p1=new Person1(1001,"刘冰",18);
Person1 p2=new Person1(1007,"zhangfan",20);
Person1 p3=new Person1(1003,"wangyong",31);
Person1 p4=new Person1(1004,"sunbing",35);
Person1 p5=new Person1(1005,"kongzi",77);
Person1 p[]=new Person1[]{p1,p2,p3,p4,p5};
TreeSet ts=new TreeSet();
for(int i=0;i<p.length;i++){
ts.add(p[i]);
}
for(Iterator it=ts.iterator();it.hasNext();){
Person1 pp=(Person1)it.next();
System.out.println(pp);
}

}}请问:这个TreeSet是不是在添加元素的时候使用了重写的compareTo方法,在compareTo方法中,return this.id-p.id这个语句的作用是什么,为什么this.id-p.id就等于当前对象的id啊?

解决方案 »

  1.   

    放入TreeSet中的对象必须实现Comparable接口,才能进行排序(默认自然排序)
      

  2.   

    请问:这个TreeSet是不是在添加元素的时候使用了重写的compareTo方法,--是的;在compareTo方法中,return this.id-p.id这个语句的作用是什么,
    --这个就是排序时比较的基准啊,按照id的大小进行排序;为什么this.id-p.id就等于当前对象的id啊?
    --this.id-p.id就不是当前对象的id,当前对象的id就是this.id,这句只是根据this.id-p.id的值是正/负来比较大小时用到的。
      

  3.   

    int compareTo(object other),想默认排序就得实现compareTo方法,如果返回值大于0则当前对象大于other对象,...;this.id-p.id不是当前对象的id而是返回值.
      

  4.   

    lz要排序还可以实现java.util.Comparator接口
      

  5.   

    这个TreeSet是在添加元素的时候使用了重写的compareTo方法, 
    在compareTo方法中,return this.id-p.id这个语句的作用是为了用当前对象 与另一个参数对象作比较 
    this.id-p.id就不是当前对象的id,当前对象的id就是this.id,this.id-p.id为了用当前对象 与另一个参数对象作比较  并返回他的差值
      

  6.   

    那另外的参数对象是在添加的时候传进来的吧?那这个参数对象的ID是多少呢?按照结果来分析,p.id等于0吧?要进行比较,至少得两个对象吧?那这两个对象具体是指哪两个对象啊?
    非常感谢大家的解答。
      

  7.   

    在compareTo方法中,return this.id-p.id这个语句的作用是什么,为什么this.id-p.id就等于当前对象的idthis代表的是当前类的对象
    this.id - p.id  比较两个Person对象的id  
    java中非0既真.
    this.id - p.id 结果小于等于0  返回 False  大于0返回True
      

  8.   

    public int compareTo(Object o)

    Person1 p=(Person1)o; 
    return this.id-p.id; 


    之所以能把它写成上述形式是因为id是int类型的。其实把return this.id-p.id;这句话说的更普通更易懂的就是
    下面这种形式。public int compareTo(Object o)

    Person1 p=(Person1)o; 
    //return this.id-p.id; 
    if(id<p.id)
    return -1;
      if(id>p.id)
       return 1;
       else
       return 0;
    } 并且你的TestComparable类中的TreeSet语句也要写成TreeSet<Person1> ts=new TreeSet<Person1>();这种形式的,
    要不然编译器就会提示你使用了未经检查或不安全的操作。 小小建议,仅供参考。
      

  9.   

    貌似你的代码没有调用过compareto()这个方法
    我的理解是这样的,根据计算的返回值,判断两者是否相同
    if(a.comparerto(b)==0)
    {相同;}
    else
    {不同;}