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

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

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

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

评分

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

查看全部评分

6 个回复

正序浏览
刘学明    发表于 2013-5-15 23:01
详细给你说一下:
一共是两种: 自然排序和比较器排序。
1 自然排序:

懂了 太TM经典了。。。感谢啊。。。。太感谢了。。。!!!
回复 使用道具 举报
刘茂林 发表于 2013-5-15 22:58
哦哦 我记得视频上 有说 让一种 两个对象比较   一种是建立个比较器。  就是这两种了把。。

这两种 一般 ...

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

2 比较器排序:

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

评分

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

查看全部评分

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

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

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

评分

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

查看全部评分

回复 使用道具 举报
哇 沙发好详细 又好快
回复 使用道具 举报
首先
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

查看全部评分

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