黑马程序员技术交流社区
标题:
关于比较器的小问题。
[打印本页]
作者:
CHJ
时间:
2013-9-24 19:53
标题:
关于比较器的小问题。
本帖最后由 CHJ 于 2013-9-24 20:14 编辑
class MyCompare implements Comparator
{
//重写Comparator中的compare方法,按姓名顺序排序
public int compare(Object o1,Object o2)
{
//判断给定对象是否为Student类,否则抛异常
if (!((o1 instanceof Student) && (o2 instanceof Student)))
throw new RuntimeException("NotSuchTypeException");
//将给定对象强转为Student类
Student s1 = (Student)o1;
Student s2 = (Student)o2;
//比较名字,返回数值,相同则比较年龄
int n = s1.getName().compareTo(s2.getName());
if (n == 0)
return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
return n;
}
}
复制代码
return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
这行,我能写成 return s1.getAge() - s2.getAge(); 么
作者:
张文豪
时间:
2013-9-24 20:06
可以!!
API上如是说:
Integer类中的compareTo(Integer in)方法是在数字上比较两个 Integer 对象。
如果该 Integer 等于 Integer 参数,则返回 0 值;如果该 Integer 在数字上小于 Integer 参数,则返回小于 0 的值;如果 Integer 在数字上大于 Integer 参数,则返回大于 0 的值.
所以写这个return s1.getAge() - s2.getAge();也是正确的。
作者:
yting_xmei1129
时间:
2013-9-24 20:08
楼主,你这个问题饿昨天也看见别人提过,饿回答过,貌似找不到了,又得重写了、、、郁闷!
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 、、、、、、、、、、、、、、、、、、、、、
作者:
梁贺
时间:
2013-9-24 20:11
可以的,
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(); 照样能起到这个效果。
作者:
CHJ
时间:
2013-9-24 20:13
谢谢各位
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2