黑马程序员技术交流社区

标题: 在集合排序中,Comparable和Comparator有什么区别? [打印本页]

作者: KevinSmart    时间: 2014-5-30 21:00
标题: 在集合排序中,Comparable和Comparator有什么区别?
本帖最后由 KevinSmart 于 2014-6-1 09:27 编辑

在集合排序中,想给数据排序,有两种实现方式Comparable和Comparator,这两者有什么区别?
作者: 武器商人    时间: 2014-5-30 22:22
Comparable,它实现的是数据的自然排序,就是按照字典顺序排序
Comparator.它是可以进行非自然排序的比较
作者: 何堂红    时间: 2014-5-30 22:58
补充楼上的:
Comparator 一般用于集合中重新构造比较器。
作者: 饥渴ing    时间: 2014-5-31 01:11
等大神来详细解释下,我只知道comparable是对象与类本身比较.comparator是对两个对象进行比较,comparator覆写equals方法时俩对象排序相同才能返回true.
作者: hamiguadjs    时间: 2014-5-31 01:15
a.自然顺序(Comparable)
        TreeSet类的add()方法中会把存入的对象提升为Comparable类型
        调用对象的compareTo()方法和集合中的对象比较
        根据compareTo()方法返回的结果进行存储
b.比较器顺序(Comparator)
        创建TreeSet的时候可以制定 一个Comparator
        如果传入了Comparator, 那么TreeSet就会按照比较器中的顺序排序
        add()方法内部会自动调用Comparator接口中compare()方法排序
c.两种方式的区别
        TreeSet构造函数什么都不传, 默认按照类中Comparable的顺序(没有就报错ClassCastException)
        TreeSet如果传入Comparator, 就优先按照Comparator

作者: 饥渴ing    时间: 2014-5-31 01:26
hamiguadjs 发表于 2014-5-31 01:15
a.自然顺序(Comparable)
        TreeSet类的add()方法中会把存入的对象提升为Comparable类型
        调用对象的compareT ...

又学习了TresSet的知识
作者: KevinSmart    时间: 2014-5-31 20:06
hamiguadjs 发表于 2014-5-31 01:15
a.自然顺序(Comparable)
        TreeSet类的add()方法中会把存入的对象提升为Comparable类型
        调用对象的compareT ...

讲的很全面,谢谢分享
作者: 明日辉煌    时间: 2014-6-1 08:22
hamiguadjs 发表于 2014-5-31 01:15
a.自然顺序(Comparable)
        TreeSet类的add()方法中会把存入的对象提升为Comparable类型
        调用对象的compareT ...

学习了,讲的很明白啊!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2