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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Comparable和Comparator两接口的主要用法与区别.  望详解下.谢谢

5 个回复

正序浏览
Comparator   和Comparable都是接口,两者之间可以说没什么关系。Comparator位于包java.util下,而Comparable位于包java.lang下。通俗的说:Comparator是一个比较器,相当于一种工具,它定义了两个方法,分别是   int   compare(T   o1,   T   o2)和   boolean   (Object   obj),所以你可以通过实现这个接口来是定义你所有需要的比较器,如比较俩个人的大小,对象人有姓名、性别、年龄等属性,你在定义这个比较器的时候就可以在compare方法中对传入的俩个参数(person1,person2)的年龄进行大小的比较,从而确定这俩个人的大小。  
  而Comparable接口是你要是定义的类要实现的一个接口(如果这个类的实例需要和同一类的别的实例比较大小,而这个大小关系你希望是你自己定义的),它只提供了   int   compareTo(T   o)方法,也就是说假如我定义了一个Person类,这个类实现了   Comparable接口,那么当我实例化Person类的person1后,我想比较person1和一个现有的Person对象person2的大小时,我就可以这样来调用:person1.comparTo(person2),通过返回值就可以判断了;而此时如果你定义了一个   PersonComparator(实现了Comparator接口)的话,那你就可以这样:PersonComparator   comparator=   new   PersonComparator();comparator.compare(person1,person2);。
回复 使用道具 举报
Comparator   和Comparable都是接口,两者之间可以说没什么关系。Comparator位于包java.util下,而Comparable位于包java.lang下。通俗的说:Comparator是一个比较器,相当于一种工具,它定义了两个方法,分别是   int   compare(T   o1,   T   o2)和   boolean   (Object   obj),所以你可以通过实现这个接口来是定义你所有需要的比较器,如比较俩个人的大小,对象人有姓名、性别、年龄等属性,你在定义这个比较器的时候就可以在compare方法中对传入的俩个参数(person1,person2)的年龄进行大小的比较,从而确定这俩个人的大小。  
  而Comparable接口是你要是定义的类要实现的一个接口(如果这个类的实例需要和同一类的别的实例比较大小,而这个大小关系你希望是你自己定义的),它只提供了   int   compareTo(T   o)方法,也就是说假如我定义了一个Person类,这个类实现了   Comparable接口,那么当我实例化Person类的person1后,我想比较person1和一个现有的Person对象person2的大小时,我就可以这样来调用:person1.comparTo(person2),通过返回值就可以判断了;而此时如果你定义了一个   PersonComparator(实现了Comparator接口)的话,那你就可以这样:PersonComparator   comparator=   new   PersonComparator();comparator.compare(person1,person2);。
回复 使用道具 举报
Comparator   和Comparable都是接口,两者之间可以说没什么关系。Comparator位于包java.util下,而Comparable位于包java.lang下。通俗的说:Comparator是一个比较器,相当于一种工具,它定义了两个方法,分别是   int   compare(T   o1,   T   o2)和   boolean   (Object   obj),所以你可以通过实现这个接口来是定义你所有需要的比较器,如比较俩个人的大小,对象人有姓名、性别、年龄等属性,你在定义这个比较器的时候就可以在compare方法中对传入的俩个参数(person1,person2)的年龄进行大小的比较,从而确定这俩个人的大小。  
  而Comparable接口是你要是定义的类要实现的一个接口(如果这个类的实例需要和同一类的别的实例比较大小,而这个大小关系你希望是你自己定义的),它只提供了   int   compareTo(T   o)方法,也就是说假如我定义了一个Person类,这个类实现了   Comparable接口,那么当我实例化Person类的person1后,我想比较person1和一个现有的Person对象person2的大小时,我就可以这样来调用:person1.comparTo(person2),通过返回值就可以判断了;而此时如果你定义了一个   PersonComparator(实现了Comparator接口)的话,那你就可以这样:PersonComparator   comparator=   new   PersonComparator();comparator.compare(person1,person2);。
回复 使用道具 举报
1.Comparable接口是在java.lang类中的,而Comparator接口是在java.util类中的。
2.Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义 Comparator 接口的方法或在集合内实现 Comparable 接口的方法。

评分

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

查看全部评分

回复 使用道具 举报
comparable 和 Comparator 都是用来实现集合中的排序的
只是Comparable是在集合内部定义的方法实现的排序
Comparator是在集合外部实现的排序
所以,如想实现排序,就需要在集合外定义Comparator接口的方法compare()或在集合内实现Comparable接口的方法compareTo()  
Comparable是一个对象本身就已经支持自比较所需要实现的接口(如String Integer自己就可以完成比较大小操作)   
而Comparator是一个专用的比较器,当这个对象不支持自比较或者自比较函数不能满足你的要求时,你可以写一个比较器来完成两个对象之间大小的比较。

评分

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

查看全部评分

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