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啊?
--这个就是排序时比较的基准啊,按照id的大小进行排序;为什么this.id-p.id就等于当前对象的id啊?
--this.id-p.id就不是当前对象的id,当前对象的id就是this.id,这句只是根据this.id-p.id的值是正/负来比较大小时用到的。
在compareTo方法中,return this.id-p.id这个语句的作用是为了用当前对象 与另一个参数对象作比较
this.id-p.id就不是当前对象的id,当前对象的id就是this.id,this.id-p.id为了用当前对象 与另一个参数对象作比较 并返回他的差值
非常感谢大家的解答。
this.id - p.id 比较两个Person对象的id
java中非0既真.
this.id - p.id 结果小于等于0 返回 False 大于0返回True
{
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>();这种形式的,
要不然编译器就会提示你使用了未经检查或不安全的操作。 小小建议,仅供参考。
我的理解是这样的,根据计算的返回值,判断两者是否相同
if(a.comparerto(b)==0)
{相同;}
else
{不同;}