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

© hzhzhen 中级黑马   /  2015-5-23 10:49  /  881 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在Student中实现Comparable接口并构造了实现Comparable接口的compareToStudent。下面是代码示例:
  1. import java.util.*;
  2. public class TreeSetTest {
  3.            public static void main(String[] args)
  4.            {
  5.                    //TreeSet ts=new TreeSet();
  6.                    TreeSet ts=new TreeSet(new Students.compareToStudent());
  7.                    ts.add(new Students(2,"zhangshan"));
  8.                    ts.add(new Students(3,"lishi"));
  9.                    ts.add(new Students(1,"wangwu"));         
  10.                   Iterator it=ts.iterator();
  11.                    while(it.hasNext())
  12.                    {
  13.                            System.out.println(it.next());
  14.                    }               
  15.            }
  16. }
  17. class Students implements Comparable
  18. {
  19.            int num;
  20.            String name;
  21.            Students(int num,String name)
  22.            {
  23.                    this.num=num;
  24.                    this.name=name;
  25.            }
  26. //定义一个内部类来实现比较器

  27.            static class compareToStudent implements Comparator        
  28.           {
  29.                    public int compare(Object o1, Object o2) {
  30.                            Students s1=(Students)o1;
  31.                            Students s2=(Students)o2;
  32.                            int rulst= s1.num > s2.num ? 1 : (s1.num==s2.num ? 0 :-1);
  33.                            if(rulst==0)
  34.                            {
  35.                                    rulst=s1.name.compareTo(s2.name);
  36.                            }               
  37.                            return rulst;
  38.                    }               
  39.            }
  40. //写具体的比较方法

  41.            public int compareTo(Object o)               
  42.           {
  43.                    int result;
  44.                    Students s=(Students)o;
  45.                    result=num >s.num ? 1:(num==s.num ? 0 : -1);
  46.                    if(result==0)
  47.                    {
  48.                            result=name.compareTo(s.name);
  49.                    }
  50.                    return result;
  51.            }
  52.            public String toString()
  53.            {
  54.                    return num+":"+name;
  55.            }
  56. }
复制代码

我就想知道
  static class compareToStudent implements Comparator  {.......   }
和 public int compareTo(Object o)  {.....}的区别是什么,感觉代码都差不多呗???

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

4 个回复

正序浏览
public int compareTo(Object o)  {.....}是实现接口Comparable后复写compareTo方法static class compareToStudent implements Comparator  {.......   }是定义一个类实现Comparator接口,复写compare方法,
Comparator 和 Comparable 相同的地方:
他们都是java的一个接口, 并且是用来对自定义的class比较大小的
两种方法各有优劣, 用Comparable 简单, 只要实现Comparable 接口的对象直接就成为一个可以比较的对象,
但是需要修改源代码, 用Comparator 的好处是不需要修改源代码, 而是另外实现一个比较器, 当某个自定义
的对象需要作比较的时候,把比较器和对象一起传递过去就可以比大小了, 并且在Comparator 里面用户可以自
己实现复杂的可以通用的逻辑,使其可以匹配一些比较简单的对象,那样就可以节省很多重复劳动了
回复 使用道具 举报
一个在对象上现实排序、一个在集合中现实排序,看具体需要用吧
回复 使用道具 举报
有比较器以比较器为准,没有比较器,用compareTo比较。
回复 使用道具 举报
一个是类,一个是匿名类,就这么点区别
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马