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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 逝去的记忆ヽ 于 2012-6-17 20:03 编辑

部分代码和运行结果如下:

public int compareTo(Object obj)
{
  if (!(obj instanceof Student))//比较接受的是不是学生类。
   throw new RuntimeException("不是学生对象。");
  
  Student s = (Student)obj;//进行强制转换 将接受的OBJ转化成student类
  System.out.println(this.age+"--------"+s.age);//在这里我输出的是在TreeSet添加元素时,年龄进行比较。
  if (this.age>s.age)
   return 1;
  if(this.age == s.age)
  {
   return this.name.compareTo(s.name);//在比较字符串时,String类也继承了comparable这个接口。
  }
  return -1;
}
}
class  TreeSetDemo
{
public static void main(String[] args)
{
  TreeSet ts = new TreeSet();
  ts.add(new Student("zhangsan",3));
  ts.add(new Student("lisi",30));
  ts.add(new Student("wangwu",27));
  ts.add(new Student("zhaosi",25));
  for(Iterator it = ts.iterator(); it.hasNext(); )
  {
   Student s = (Student)it.next();
   System.out.println(s.getName()+"--------"+s.getAge());
  }
}



运行结果是:
30--------3
27--------3
27--------30
25--------27
25--------3//那么在这里当年龄25进来的时候应该是和里面有的所有元素进行比较的吧?可是这里就和3进行了比较,30和,27都没有进行比较。这是为什么?我换了好几个数字都不行。求大神指教。
zhangsan-------3
zhaosi--------25
wangwu--------27
lisi--------30

3 个回复

倒序浏览
本帖最后由 车风波 于 2012-6-17 18:25 编辑

你看错了
25--------27
25--------3  25和 27、3都比较了 。
在25出现前  set里有30 27 3  当25进入后,它先取中间数27 因为27>25  所以就25不用再和30比了吧。然后再和3比,就排除顺序了。

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
二叉树结构就是,假设第一进来的是A
你进来的时候比A大,那你就不跟比A小的同学比了。
你进来的时候比A小,那你就不跟比A大的同学比了。
回复 使用道具 举报
TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间大小关系,然后将集合元素按升序排列,这种方式就是自然排序。在比较之前,先跟第一个比较大小,如果它小于第一个数,因为treeSet有自身排序,它就不再跟比它小的数比较。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马