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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘茂林 高级黑马   /  2013-5-15 22:22  /  1072 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘茂林 于 2013-5-15 23:03 编辑

Comparable  compareTo  Comparator  compare
这四个我有点搞晕了。。能不能说说他们什么用途 以及什么时候用 当然有代码最好了 谢谢了、
我急求 搞得我晕菜了

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1

查看全部评分

6 个回复

倒序浏览
首先
Comparable是接口 compareTo是Comparable中的方法。
Comparator也是接口 compare是Comparator中的方法。
对象一般有两种排序方式:一般用于集合中。
第一种方式是:实现Comparable  compareTo是Comparable接口中的方法 对于排序的对象需要覆Comparable接口中的compareTo方法。
Comparable排序代码示例:
  1. class Student implements Comparable//该接口强制让学生具备比较性。
  2. {
  3.         private String name;
  4.         private int age;

  5.         Student(String name,int age)
  6.         {
  7.                 this.name = name;
  8.                 this.age = age;
  9.         }

  10.         public int compareTo(Object obj)  // 复写Comparable接口中的compareTo方法。
  11.         {

  12.                 if(!(obj instanceof Student))
  13.                         throw new RuntimeException("不是学生对象");
  14.                 Student s = (Student)obj;

  15.                 if(this.age>s.age)
  16.                         return 1;
  17.                 if(this.age==s.age)
  18.                 {
  19.                         return this.name.compareTo(s.name);
  20.                 }
  21.                 return -1;
  22.         }
  23. }
  24. class Test
  25. {
  26.         public static void main(String[] args)
  27.         {
  28.                 TreeSet ts = new TreeSet();

  29.                 ts.add(new Student("lisi02",22));
  30.                 ts.add(new Student("lisi02",21));
  31.                 ts.add(new Student("lisi007",20));
  32.                 ts.add(new Student("lisi09",19));

  33.                 Iterator it = ts.iterator();
  34.                 while(it.hasNext())
  35.                 {
  36.                         Student stu = (Student)it.next();
  37.                         System.out.println(stu);
  38.                 }
  39.         }
  40. }
复制代码
第二种排序方式:定义一个排序类 实现Comparator接口 重写Comparator接口中的compare方法。

代码示例:
  1. class Test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 TreeSet ts = new TreeSet(new MyCompare());//将自定义的MyCompare作为参数传递给TreeSet的构造函数。来实现排序。

  6.                 ts.add(new Student("lisi02",22));
  7.                 ts.add(new Student("lisi02",21));
  8.                 ts.add(new Student("lisi007",20));
  9.                 ts.add(new Student("lisi09",19));

  10.                 Iterator it = ts.iterator();
  11.                 while(it.hasNext())
  12.                 {
  13.                         Student stu = (Student)it.next();
  14.                         System.out.println(stu);
  15.                 }
  16.         }
  17. }

  18. class MyCompare implements Comparator //定义一个排序类
  19. {
  20.         public int compare(Object o1,Object o2)
  21.         {
  22.                 Student s1 = (Student)o1;
  23.                 Student s2 = (Student)o2;

  24.                 int num = s1.getName().compareTo(s2.getName());
  25.                 if(num==0)
  26.                 {

  27.                         return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
  28.                 }

  29.                
  30.                 return num;

  31.         }
  32. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1

查看全部评分

回复 使用道具 举报
哇 沙发好详细 又好快
回复 使用道具 举报
其实从字面上面好理解些
Comparable   这个是可比较的 就是有没有比较性的意思  那理所当然的 有没有比较性 肯定是与另外一个对象相比较了所以需要覆写的方法是 compareTo
Comparator 这个是比较器的意思  也就是说  这个是要传到集合中去的  而且比较器肯定是要有2个对象才能比较了  所以这个需要覆写的是 compare
  代码我就不给你敲了  楼上都发出来了一个例子   

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1

查看全部评分

回复 使用道具 举报
刘学明    发表于 2013-5-15 22:41
首先
Comparable是接口 compareTo是Comparable中的方法。
Comparator也是接口 compare是Comparator中的方法 ...

哦哦 我记得视频上 有说 让一种 两个对象比较   一种是建立个比较器。  就是这两种了把。。

这两种 一般什么情况下使用呢 或者说 什么情况 用那种 ,一般都用那种。。
回复 使用道具 举报
刘茂林 发表于 2013-5-15 22:58
哦哦 我记得视频上 有说 让一种 两个对象比较   一种是建立个比较器。  就是这两种了把。。

这两种 一般 ...

详细给你说一下:
一共是两种: 自然排序和比较器排序。
1 自然排序:
让(对象)元素自身具备比较性。(对象)元素自身需要实现Comparable接口,覆盖CompareTo方法,
这种方式也称为元素的自然顺序。或者叫做默认顺序。

2 比较器排序:

当元素自然不具备比较性时,或者具备的比较性不是所需要的。这时就需要让集合自身具备比较性。
定义一个比较器类,实现Comparator接口 覆盖compare方法。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1

查看全部评分

回复 使用道具 举报
刘学明    发表于 2013-5-15 23:01
详细给你说一下:
一共是两种: 自然排序和比较器排序。
1 自然排序:

懂了 太TM经典了。。。感谢啊。。。。太感谢了。。。!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马