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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© CHJ 中级黑马   /  2013-9-24 19:53  /  1080 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 CHJ 于 2013-9-24 20:14 编辑
  1. class MyCompare implements Comparator  
  2. {  
  3.     //重写Comparator中的compare方法,按姓名顺序排序  
  4.     public int compare(Object o1,Object o2)  
  5.     {  
  6.         //判断给定对象是否为Student类,否则抛异常  
  7.         if (!((o1 instanceof Student) && (o2 instanceof Student)))  
  8.             throw new RuntimeException("NotSuchTypeException");  
  9.         //将给定对象强转为Student类  
  10.         Student s1 = (Student)o1;  
  11.         Student s2 = (Student)o2;  
  12.         //比较名字,返回数值,相同则比较年龄  
  13.         int n = s1.getName().compareTo(s2.getName());  
  14.         if (n == 0)  
  15.             return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));  
  16.         return n;  
  17.     }  
  18. }  
复制代码
return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
这行,我能写成 return s1.getAge() - s2.getAge(); 么

评分

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

查看全部评分

4 个回复

倒序浏览
可以!!
API上如是说:
Integer类中的compareTo(Integer in)方法是在数字上比较两个 Integer 对象。
如果该 Integer 等于 Integer 参数,则返回 0 值;如果该 Integer 在数字上小于 Integer 参数,则返回小于 0 的值;如果 Integer 在数字上大于 Integer 参数,则返回大于 0 的值.
所以写这个return s1.getAge() - s2.getAge();也是正确的。

评分

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

查看全部评分

回复 使用道具 举报
楼主,你这个问题饿昨天也看见别人提过,饿回答过,貌似找不到了,又得重写了、、、郁闷!

TreeSet 使用这个集合的时候,要了解它的排序原理,TreeSet 的底层数据结构是 二叉树,排序的话,也就是二叉树的排序,如果楼主对二叉树不熟悉的话可以百度下二叉树这个概念。

楼主问的这个 return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
这行,我能写成 return s1.getAge() - s2.getAge(); 么  可以写成 return s1.getAge() - s2.getAge(); 这样。但是这样的话看着有点不专业,我们把它封装到Integer对象里面去之后然后再调用 compartTo方法,这样看着更专业点,我们是面向对象的程序员嘛!

还有楼主实现Comparator 这个借口的话最好使用泛型,你可以少写点判断的代码,看着也更美观,也更好用、、、

希望可以帮到楼主、、、

The you smile until forever 、、、、、、、、、、、、、、、、、、、、、

评分

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

查看全部评分

回复 使用道具 举报
可以的,
int n = s1.getName().compareTo(s2.getName());  

14.        if (n == 0)  

15.            return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));  

16.        return n;  
这样是在名字一样后,按年龄排序,CompareTo返回的结果你只要看是正数,0,还会负数。所以用
return s1.getAge() - s2.getAge(); 照样能起到这个效果。
回复 使用道具 举报
谢谢各位
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马