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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 KevinSmart 于 2014-6-1 09:27 编辑

在集合排序中,想给数据排序,有两种实现方式Comparable和Comparator,这两者有什么区别?

7 个回复

倒序浏览
Comparable,它实现的是数据的自然排序,就是按照字典顺序排序
Comparator.它是可以进行非自然排序的比较
回复 使用道具 举报
补充楼上的:
Comparator 一般用于集合中重新构造比较器。
回复 使用道具 举报
等大神来详细解释下,我只知道comparable是对象与类本身比较.comparator是对两个对象进行比较,comparator覆写equals方法时俩对象排序相同才能返回true.
回复 使用道具 举报
a.自然顺序(Comparable)
        TreeSet类的add()方法中会把存入的对象提升为Comparable类型
        调用对象的compareTo()方法和集合中的对象比较
        根据compareTo()方法返回的结果进行存储
b.比较器顺序(Comparator)
        创建TreeSet的时候可以制定 一个Comparator
        如果传入了Comparator, 那么TreeSet就会按照比较器中的顺序排序
        add()方法内部会自动调用Comparator接口中compare()方法排序
c.两种方式的区别
        TreeSet构造函数什么都不传, 默认按照类中Comparable的顺序(没有就报错ClassCastException)
        TreeSet如果传入Comparator, 就优先按照Comparator

评分

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

查看全部评分

回复 使用道具 举报 1 0
hamiguadjs 发表于 2014-5-31 01:15
a.自然顺序(Comparable)
        TreeSet类的add()方法中会把存入的对象提升为Comparable类型
        调用对象的compareT ...

又学习了TresSet的知识
回复 使用道具 举报
hamiguadjs 发表于 2014-5-31 01:15
a.自然顺序(Comparable)
        TreeSet类的add()方法中会把存入的对象提升为Comparable类型
        调用对象的compareT ...

讲的很全面,谢谢分享
回复 使用道具 举报
hamiguadjs 发表于 2014-5-31 01:15
a.自然顺序(Comparable)
        TreeSet类的add()方法中会把存入的对象提升为Comparable类型
        调用对象的compareT ...

学习了,讲的很明白啊!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马