黑马程序员技术交流社区
标题:
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