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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

treeset两种排序方式comparable 和comparator有什么区别啊

3 个回复

倒序浏览
comparable是接口 ,实现了comparable接口的对象存进 treeset的时候才能排序,否则出现异常。
comparator为比较器,可以无视对象本身的排序方法,强制拿到比较器内用比较器的方法进行比较。
comparable是类存入treeset的先决条件,comparator则是一种拓展应用~
回复 使用道具 举报
Comparator是位于包java.util下,然而Comparable位于包java.lang下 。
Comparable 是一个对象本身就已经支持自比较所需要实现的接口,
比如 String 自己就可以完成比较大小操作,已经实现了Comparable接口。
此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,
类的 compareTo 方法被称为它的自然比较方法。
回复 使用道具 举报
他们都是接口,可以实现对数据的存储排序,定义类实现comparable 接口,复写compaTo()方法,是让元素本身具备比较性,看复写的方法 ,不是有一个To吗?
而comparator 接口是作为一个比较器的,我们可以实现定制排序,用这个比较器作为treeset的构造函数参数进行传递,比较器实现了compare接口,需要复写里面的compare()方法。
建议大家用comparator

举个例子:这个是集合视频中例子:
comparator例子:
TreeSet<Person> ts = new TreeSet<Person>(new Comparator<Person>() {
                @Override
                public int compare(Person o1, Person o2) {
                        int temp = o1.getAge()-o2.getAge();
                        return temp == 0 ? o1.getName().compareTo(o1.getName()):temp;
                        }
                });

comparable 例子:

public class Person implements Comparable {
public int compareTo(Person p){
                @Override
//                Person p = (Person)obj;
                int temp = this.age - p.age;
                return temp==0?this.name.compareTo(p.name):temp;
        }

}





评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

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