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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马—王宁 中级黑马   /  2012-4-16 15:43  /  2718 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

comparator 和 comparable什么时候用,有什么时候不同,请高手指点?

5 个回复

倒序浏览
comparable 是按照自然排序的方式进行排序的。
comparator 是自己定义一个比较器,可以按照自己想要的比较方式进行比较。
回复 使用道具 举报
两个都是进行比较的接口。
当我们需要对对象进行比较排序时,我们首先考虑的是对象的自然顺序,也就是对象所属类实现Comparable接口,
当类实现的comparable接口中的实现方式不是我们想要的排序方式时,我们可以定义一个类(比较器)实现Comparator接口,
不同:自然排序只能有一种,实现Comparable接口。而比较器我们可以定义多个。

评分

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

查看全部评分

回复 使用道具 举报
comparable是通用的接口,用户可以实现它完成自己特定的比较,一个类实现了comparable接口表明这个类的对象之间是可以相互比较的。

comparator可以理解为一种算法的实现,在需要容器集合collection需要比较功能的时候来指定这个比较器,这可以看出一种设计模式,将算法和数据分离。为了使用不同的排序标准准备的,比如:升序,降序或者其他排序

优缺点:comparable 他和一个具体类绑定属于"静态绑定",而comparator比较灵活,它可以被用于各个需要比较功能的类使用 属于"动态绑定"
回复 使用道具 举报
comparable&   Comparator    都是用来实现集合中的排序的,只是Comparable是在集合内部定义的方法实现的排序,Comparator是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义Comparator接口的方法compare()或在集合内实现Comparable接口的方法compareTo()。

Comparable是一个对象本身就已经支持自比较所需要实现的接口(如String    Integer自己就可以完成比较大小操作)   
   
   而Comparator是一个专用的比较器,当这个对象不支持自比较或者自比较函数不能满足你的要求时,你可以写一个比较器来完成两个对象之间大小的比较。
回复 使用道具 举报
当我们自定义一个类存储到集合中时,我们要复写 hashcode  ,equals方法,如果我们要存到TreeSet中我们必须要这个类具有比较性,实现Comparable,或者定义比较器让集合实现Comparator,.当定义的类中的比较方法不是你所希望的 你就定义比较器实现Comparator满足你的需求
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马