黑马程序员技术交流社区

标题: java的比较器 [打印本页]

作者: liujie445012100    时间: 2014-6-10 01:08
标题: java的比较器
至今没有搞懂什么时候用Comparator,什么时候用Comparable
作者: 林峰    时间: 2014-6-10 01:47
Comparator和Comparable,两者都是接口
Comparator代表的是比较器,顾名思义用于二叉树数据结构的TreeSet集合和TreeMap(以及子类),前者中比较里面元                                          
                   素 ,后者比较的是键,  不定义泛型的情况下覆盖的方法是:(具体对象依据泛型而定)
                                         int   compare(object obj)
Comparable是使某个类实现这个接口,然后这个类所产生的对象具有比较性,
                      即存二叉树数据结构的TreeSet集合和TreeMap(以及子类)时调用对象本身的compareTo功能进行排序,若存入的对象不具备
                      比较功能(即没有实现Comparable),则会存储失败.不定义泛型的情况下覆盖的方法是:(具体对象依据泛型而定)
                                         int   compareTo(object obj)
总结:如果只需要元素本身具备比较功能,用Comparable;
        如果需要集合本身具备比较功能,用类实现Comparator,集合具备比较性只需这个类产生的对象可以直接传给这个集合进行构造
       当存储的对象具备比较性,集合本身也具有比较器时,以比较器为准;

作者: 谭荣强    时间: 2014-6-10 02:19
实现comparable:已经按自定义的方式排序了。如person按年龄排序。
但是如果还想在用姓名排序怎么办?不建议改源码,这时就使用comparator。comparable的排序就会变被替代了。
一般说,comparalbe应该可以实现排序了,如果排序条件继续变化,则用comparator。




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