黑马程序员技术交流社区

标题: treeset两种排序方式comparable 和comparator有什么区别啊 [打印本页]

作者: 陈波    时间: 2012-4-29 22:18
标题: treeset两种排序方式comparable 和comparator有什么区别啊
treeset两种排序方式comparable 和comparator有什么区别啊
作者: 贾联国    时间: 2012-4-29 22:28
comparable是接口 ,实现了comparable接口的对象存进 treeset的时候才能排序,否则出现异常。
comparator为比较器,可以无视对象本身的排序方法,强制拿到比较器内用比较器的方法进行比较。
comparable是类存入treeset的先决条件,comparator则是一种拓展应用~
作者: 王德升    时间: 2012-4-29 22:33
Comparator是位于包java.util下,然而Comparable位于包java.lang下 。
Comparable 是一个对象本身就已经支持自比较所需要实现的接口,
比如 String 自己就可以完成比较大小操作,已经实现了Comparable接口。
此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,
类的 compareTo 方法被称为它的自然比较方法。
作者: suiabing    时间: 2012-4-29 22:42
他们都是接口,可以实现对数据的存储排序,定义类实现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;
        }

}










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