黑马程序员技术交流社区

标题: Comparable和Comparator的区别 [打印本页]

作者: 贾波    时间: 2013-11-27 22:19
标题: Comparable和Comparator的区别
Comparable和Comparator的区别
作者: ysunday    时间: 2013-11-27 22:29
comparable接口是类实现的,比如Person,比如Student。实现这个接口是让类自身具备比较性(比如String自身具备比较性吧,Integer自身也有比较性)
comparator接口是让集合具备比较性。比如Set<String> set = new TreeSet<>(new Comparator(){});这个的意思就是让你这个集合按照你的比较器进行排序。

如果需要例子代码你再继续说就行
作者: 陪你等日出    时间: 2013-11-27 22:37
1. Comparable接口用于使一个类自身具备比较性,例如:
  1. /*例如学生本来自身不具备比较性,但是想让其按照考试分数排序*/
  2. class Student implements Comparable{
  3. }
复制代码

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

2.Comparable 类里面的比较方法是compareTo方法,Comparator类里面的比较方法是compare,子类在实现这两个接口后,要覆盖这两个方法。
作者: 石头6004    时间: 2013-11-27 22:59
本帖最后由 石头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. }
复制代码



作者: 容嬷嬷当年也是    时间: 2013-11-28 01:04
comparable& Comparator 都是用来实现集合中的排序的,只是Comparable是在集合内部定义的方法实现的排序,Comparator是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义Comparator接口的方法compare()或在集合内实现Comparable接口的方法compareTo()。

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

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




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2