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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hzhzhen 中级黑马   /  2015-5-23 10:49  /  757 人查看  /  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 个回复

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