Comparable和Comparator这2个接口的功能都是比较器,但是在使用上有什么区别呢?
Comparable:
可以认为是一个类比较器,实现这个接口的类可以自定义类的比较,但是必须实现compareTo方法。或者你想用集合框架的sort方法,则该对象必须实现Comparable接口。
Comparator:
这个接口则可以认为是一个外在的比较器,主要用于以下场景:
1.对象不支持和自己比较,但是又需要对2个对象进行比较;
2.本身的比较方法不能满足需求,需要自定义比较方法。
3.当元素自身不具备比较性,或者元素自身具备的比较性不是所需的。
举个栗子:
public class Person {
private String name;
private int age;
public Person(String name,int age){
this.age = age;
this.name=name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return name + ":" + age;
}
}
public class CompareUtils {
public static void main(String[] args) {
TreeSet<Person> lists = new TreeSet<>(new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o1.getAge()-o2.getAge();
}
});
for(int i = 0 ;i<10;i++){
Person person = new Person("aa"+i,(i+1));
lists.add(person);
}
System.out.println(lists);
}
}