A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在下面这个类中实现了Comparable接口,并重写了该接口中的compareTo()方法。
import java.util.Iterator;
import java.util.TreeSet;
public class TreeSetDemo{
public static void main(String args[]){
     TreeSet ts=new TreeSet();
     ts.add(new Student("zhangsan01",22));
     ts.add(new Student("zhangsan007",20));
     ts.add(new Student("zhangsan09",19));
     ts.add(new Student("zhangsan001",24));
     ts.add(new Student("zhangsan08",23));
     ts.add(new Student("zhangsan011",25));   //?
     ts.add(new Student("zhangsan012",26));   //?
     ts.add(new Student("zhangsan015",27));   //??  疑问 zhangsan011、zhangsan012、zhangsan015这个三个对象存入时,这里自动择中比较是怎么择的呢? 运行结果我以看到了,不解是什么规律
     Iterator it=ts.iterator();
    while(it.hasNext()){
     Student stu=(Student)it.next();
     System.out.println(stu.getName()+"....."+stu.getAge());
    }
   }
}
class Student implements Comparable{
  private String name;
  private int age;
  Student(String name,int age){
    this.name=name;
    this.age=age;
  }
  public String getName(){
   return name;
  }
  public int getAge(){
   return age;
  }
  public int compareTo(Object obj){
   if(!(obj instanceof Student))
        throw new RuntimeException("不是学生对象");
      Student s=(Student)obj;
      {
      System.out.println(this.name+"....Compareto...."+s.name);
      if(this.age>s.age)
      return 1;
      if(this.age==s.age)
      return 0;
      return -1;
    }
   }
}

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

4 个回复

倒序浏览
这里的student已经实现了Comparable接口,在实现接口方法的时候,是使用的年龄排序
if(this.age>s.age)
      return 1;
      if(this.age==s.age)
      return 0;
      return -1;//这段代码的意思就是this的年龄比参加比较s的年龄大,compareTo就返回真,相等返回0,小于就返回-1。
回复 使用道具 举报
贾联国 发表于 2012-5-2 23:36
这里的student已经实现了Comparable接口,在实现接口方法的时候,是使用的年龄排序
if(this.age>s.age)
   ...

谢谢 ,答非我所问
回复 使用道具 举报
乔建国 发表于 2012-5-2 23:43
谢谢 ,答非我所问

既然实现了Comparable,就用实现Comparable的方法比较,这实现的方法是比年龄,和名字没关系,他叫什么都随便,我可能没理解你说的到底是什么意思。
“疑问 zhangsan011、zhangsan012、zhangsan015这个三个对象存入时,这里自动择中比较是怎么择的呢?”
”自动择中“是什么?
回复 使用道具 举报
public int compareTo(Object obj){
   if(!(obj instanceof Student))
        throw new RuntimeException("不是学生对象");
      Student s=(Student)obj;
      {
      System.out.println(this.name+"....Compareto...."+s.name);
      if(this.age>s.age)
      return 1;
      if(this.age==s.age)
      return 0;
      return -1;
          //修改代码:
          int temp=this.age-s.age;
          return  temp==0?this.name.length()-s.name.length():temp;

    }
   }
}
//因为你复写了compareTo()方法,所以在TreeSet存入对象时,用的是比较年龄的大小来排序的。
//建议,你增加次要判断,如果你存入的2个人年龄相同,岂不是不能存进去了,一个班里面难道
//没有相同年龄的人吗?
//修改代码:
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马