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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© liujie445012100 中级黑马   /  2014-6-10 01:08  /  914 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

至今没有搞懂什么时候用Comparator,什么时候用Comparable

2 个回复

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

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
实现comparable:已经按自定义的方式排序了。如person按年龄排序。
但是如果还想在用姓名排序怎么办?不建议改源码,这时就使用comparator。comparable的排序就会变被替代了。
一般说,comparalbe应该可以实现排序了,如果排序条件继续变化,则用comparator。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马