Comparable接口
Comparable是排序接口。若一个类实现了Comparable接口,就意味着该类支持排序。实现了Comparable接口的类的对象的列表或数组可以通过Collections.sort或Arrays.sort进行自动排序。
public class ListSortTest {
public static void main(String[] args) {
List<Person> list = new ArrayList<>();
list.add(new Person("Daniel",20));
list.add(new Person("Eddie",25));
list.add(new Person("Jessica",22));
System.out.println("排序前:"+"\n"+list);
Collections.sort(list);
System.out.println("Comparable逆序排序:"+"\n"+list);
}
}
class Person implements Comparable<Person>{
private String name;
private int age;
public Person() {
super();
// TODO Auto-generated constructor stub
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
@Override
public int compareTo(Person p) {
return p.getAge() - this.age;
}
}
Comparator接口
Comparator是比较接口,我们如果需要控制某个类的次序,而该类本身不支持排序(即没有实现Comparable接口),那么我们就可以建立一个“该类的比较器”来进行排序,这个“比较器”只需要实现Comparator接口即可。也就是说,我们可以通过实现Comparator来新建一个比较器,然后通过这个比较器对类进行排序。
1.静态内部类实现
2.匿名内部类实现
3.主类实现Comparator接口(不推荐)
public class ListSortTest {
public static void main(String[] args) {
List<Person> list = new ArrayList<>();
list.add(new Person("Daniel",20));
list.add(new Person("Eddie",25));
list.add(new Person("Jessica",22));
System.out.println("排序前:"+"\n"+list);
//匿名内部类排序
Collections.sort(list, new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o1.getAge() - o2.getAge();
}
});
System.out.println("Comparator匿名内部类正序排序:"+"\n"+list);
Collections.sort(list);
System.out.println("Comparable逆序排序:"+"\n"+list);
//静态内部类正序排序
Collections.sort(list, new ComparatorDemo());
System.out.println("Comparator静态内部类正序排序:"+"\n"+list);
}
//静态内部类
static class ComparatorDemo implements Comparator<Person>{
@Override
public int compare(Person o1, Person o2) {
return o1.getAge() - o2.getAge();
}
}
}