他们都是接口,可以实现对数据的存储排序,定义类实现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;
}
}
|