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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈嘉宾 中级黑马   /  2012-5-30 16:27  /  1813 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Comparable跟Comparator有什么不同?

3 个回复

倒序浏览
都是让对象或者集合具备比较性的,区别嘛。。。
Comparable接口是让集合中元素自身有比较性,嘿嘿
如果元素自身不具备比较性,或者说具备的比较性不是所需要的话,那么这时
需要让集合自身具备比较性,这个时候用Comparator接口创建一个子类对象给集合,这样集合就有了比较性
至于怎么用嘛。。。
我感觉首先应该是先让元素本身具有比较性就是定义元素时候实现Comparator接口,然后才考虑Comparator接口对象

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 张亭 于 2012-5-30 16:56 编辑

从名字上看也能看出点区别来了,
Comparable,形容词,可比较的
Comparator,名词,比较器

意思是说,实现了Comparable就具备了比较性,按API的说法:此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序.

如果某个类没有这种自然排序或者有自然排序(已经实现了Comparable,具备了一个比较顺序),但这个顺序不是你想要的,在不改动源码的情况下,
想要有别的排序方法,就建立个比较器(实现Comparator的类),将对象以此比较器中的设计的方法进行比较,排序,这叫定制排序

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
一个类实现了Camparable接口则表明这个类的对象之间是可以相互比较的,这个类对象组成的集合就可以直接使用sort方法排序。
Comparator可以看成一种算法的实现,将算法和数据分离,Comparator也可以在下面两种环境下使用:
1、类的设计师没有考虑到比较问题而没有实现Comparable,可以通过Comparator来实现排序而不必改变对象本身
2、可以使用多种排序标准,比如升序、降序等

还是不明白,参考这个网址:http://www.iteye.com/problems/3025

评分

参与人数 1技术分 +1 收起 理由
刘亚超 + 1

查看全部评分

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