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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 风云 中级黑马   /  2013-5-22 13:50  /  1461 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在什么情况下用自定义Comparaetor,又在什么情况下用Comparable比较合适,说的越详细越好

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

4 个回复

倒序浏览
我的理解是这样的:
首先,Comparator  它代表,强行对某个对象collection进行整体排序的比较函数,可以将Comparator传递给Collections.sort或Arrays.sort。
接口方法:
  /**
   * @return o1小于、等于或大于o2,分别返回负整数、零或正整数。
   */
  int compare(Object o1, Object o2);
其次呢,Comparable  它表示强行对实现它的每个类的对象进行整体排序,实现此接口的对象列表(和数组)可以通过Collections.sort或Arrays.sort进行自动排序。

接口方法:
  /**
   * @return 该对象小于、等于或大于指定对象o,分别返回负整数、零或正整数。
   */
  int compareTo(Object o);

  希望能够给楼主一些帮助。。

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

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

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
怎么说呢,其实两个都差不多。自定义比较类,Comparator<Objcet> 这里面的Objcet可以是任意比较对象,比较广泛;在类中实现Comparable只能针对该类了,比较有局限性。其实使用都是一样的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马