1、Comparable 一般在类内部实现,覆盖compareTo方法,相当于类内部的比较器,实现了Comparable 接口的类,可用Collections.sort排序
说明:通过 x.compareTo(y) 来“比较x和y的大小”。若返回“负数”,意味着“x比y小”;返回“零”,意味着“x等于y”;返回“正数”,意味着“x大于y”。
2、Comparator 一般在类外部实现,覆盖compare方法,相当于类外部比较器,也可用Collections.sort排序,但需要将Comparator 接口当参数传入
说明: int compare(T o1, T o2) 是“比较o1和o2的大小”。返回“负数”,意味着“o1比o2小”;返回“零”,意味着“o1等于o2”;返回“正数”,意味着“o1大于o2”。
Comparable 具体代码:
public class Person implements Comparable<Person>{
public int age;
public String name;
public Person(String name,int age) {
this.name = name;
this.age = age;
}
@Override
public int compareTo(Person person) {
return this.name.compareTo(person.name);
}
}
Comparator 具体代码:
public class MyComparator implements Comparator<Person>{
@Override
public int compare(Person person1, Person person2) {
return person1.age-person2.age;
}
}
具体使用:
public static void main(String[] args) {
Person Mike = new Person("MIKE",20);
Person Paul = new Person("Paul",29);
Person Alice = new Person("Alice",26);
Person Bob = new Person("Bob",32);
List<Person> PersonData = new ArrayList<>();
PersonData.add(Mike);
PersonData.add(Paul);
PersonData.add(Alice);
PersonData.add(Bob);
System.out.println("Original:PersonData = "+PersonData.toString());
Collections.sort(PersonData);
System.out.println("Comparable:PersonData = "+PersonData.toString());
Collections.sort(PersonData,new MyComparator());
System.out.println("Comparator:PersonData = "+PersonData.toString());
}
输出结果:
Original:PersonData = [MIKE 20, Paul 29, Alice 26, Bob 32]
Comparable:PersonData = [Alice 26, Bob 32, MIKE 20, Paul 29]
Comparator:PersonData = [MIKE 20, Alice 26, Paul 29, Bob 32]