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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡文彬 中级黑马   /  2014-3-11 10:54  /  701 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

大家请看这段代码:

public int compareTo(Object obj)
        {

               
                if(!(obj instanceof Student))
                        throw new RuntimeException("!!!");
                Student stu = (Student)obj;

                System.out.println(this.name+"....compareto....."+stu.name);
                if(this.age>s.age)
                        return 1;
                if(this.age==stu.age)
                {
                        return this.name.compareTo(stu.name);
                }
                return -1;
        }
这个方法是某类实现Comparable接口,覆盖compareTo方法,用来对Hashset元素进行排序的,为什么方法返回1就能够使系统按年龄大小给对象排序,哪位高手解释下,谢谢

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

2 个回复

倒序浏览
说一下理论吧:
      TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间大小关系,然后将集合元素按升序排列,这种方式就是自然排序。(比较的前提:两个对象的类型相同)。
      java提供了一个Comparable接口,该接口里定义了一个compareTo(Object obj)方法,该方法返回一个整数值,实现该接口的类必须实现该方法,实现了该接口的类的对象就可以比较大小。当一个对象调用该方法与另一个对象进行比较,例如obj1.comparTo(obj2),如果该方法返回0,则表明这两个对象相等;如果返回一个正整数,则表明obj1大于obj2;如果该方法返回一个负整数,则表明obj1小于obj2.

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
  1. public int compareTo(Object obj){

  2.                
  3.                 if(!(obj instanceof Student))
  4.                         throw new RuntimeException("!!!");
  5.                 Student stu = (Student)obj;

  6.                 System.out.println(this.name+"....compareto....."+stu.name);
  7.                
  8.                 int temp = this.age - stu.age;

  9.                 return temp==0?this.name.compareTo(stu.name):temp;
  10.         }

  11. //返回值为正数表明,排序时在前,负数表明在后,相等后按其它条件来排
复制代码

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马