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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 贾波 中级黑马   /  2013-11-27 22:19  /  1368 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Comparable和Comparator的区别

评分

参与人数 1黑马币 +3 收起 理由
枫儿 + 3 神马都是浮云

查看全部评分

4 个回复

倒序浏览
comparable接口是类实现的,比如Person,比如Student。实现这个接口是让类自身具备比较性(比如String自身具备比较性吧,Integer自身也有比较性)
comparator接口是让集合具备比较性。比如Set<String> set = new TreeSet<>(new Comparator(){});这个的意思就是让你这个集合按照你的比较器进行排序。

如果需要例子代码你再继续说就行

评分

参与人数 1技术分 +1 黑马币 +5 收起 理由
枫儿 + 1 + 5

查看全部评分

回复 使用道具 举报
1. Comparable接口用于使一个类自身具备比较性,例如:
  1. /*例如学生本来自身不具备比较性,但是想让其按照考试分数排序*/
  2. class Student implements Comparable{
  3. }
复制代码

Comparator接口为自定义一个比较器时实现,例如:
  1. class MyComparator implements Comparator{
  2. }
复制代码

2.Comparable 类里面的比较方法是compareTo方法,Comparator类里面的比较方法是compare,子类在实现这两个接口后,要覆盖这两个方法。

评分

参与人数 1技术分 +1 黑马币 +5 收起 理由
枫儿 + 1 + 5 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 石头6004 于 2013-11-27 23:00 编辑

Comparable和Comparator 都是用来实现集合中的排序的,只是 Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义 Comparator 接口的方法或在集合内实现 Comparable 接口的方法。Comparable 是一个对象本身就已经支持自比较所需要实现的接,而 Comparator 是一个专用的比较器,当这个对象不支持自比较或者自比较函数不能满足你的要求时,你可以写一个比较器来完成两个对象之间大小的比较。
下面是一段实现comparator 的代码:
  1. public class Demo {
  2.         comparator cl=new comparator();
  3.     public static void main(String[] args) {
  4.             Integer[] datas=new Integer[20];
  5.             Random rand=new Random();
  6.             for(int i=0;i<20;i++) {
  7.                     datas[i]=new Integer(rand.nextInt(100));
  8.             }
  9.             Arrays.sort(datas);
  10.             System.out.println(Arrays.asList(datas));
  11.     }
  12. }
  13. class comparator implements Comparator {

  14.         public int compare(Object o1, Object o2) {
  15.                 int value1= Math.abs(((Integer)o1).intValue());
  16.         int value2=Math.abs(((Integer)o2).intValue());
  17.         return value1>value2?1:(value1==value2?0:-1);
  18.         }
  19. }
复制代码


评分

参与人数 1技术分 +1 黑马币 +5 收起 理由
枫儿 + 1 + 5 赞一个!

查看全部评分

回复 使用道具 举报
comparable& Comparator 都是用来实现集合中的排序的,只是Comparable是在集合内部定义的方法实现的排序,Comparator是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义Comparator接口的方法compare()或在集合内实现Comparable接口的方法compareTo()。

Comparable是一个对象本身就已经支持自比较所需要实现的接口(如String Integer自己就可以完成比较大小操作)

而Comparator是一个专用的比较器,当这个对象不支持自比较或者自比较函数不能满足你的要求时,你可以写一个比较器来完成两个对象之间大小的比较。

评分

参与人数 1技术分 +1 黑马币 +3 收起 理由
狼王 + 1 + 3

查看全部评分

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