元素排序:Comparable 和 Comparator
字面意思:可比较的,一种能力;比较器
Comparable接口只有一个compareTo()方法,实现Comparable接口,并重写compareTo()方法
public class CompareTest {
public static void main(String[] args) {
Person p1 = new Person(1, 18, "Java");
Person p2 = new Person(2, 22, "MySQL");
Person p3 = new Person(3, 6, "Redis");
List<Person> list = new ArrayList<>();
list.add(p1);
list.add(p2);
list.add(p3);
list.forEach(p -> System.out.println(p.getName() + ":" + p.getAge()));
}
}
@Data
public class Person {
private int id;
private int age;
private String name;
public Person(int id, int age, String name) {
this.id = id;
this.age = age;
this.name = name;
}
}
运行结果:
Java:18
MySQL:22
Redis:6
Comparable
public class CompareTest {
public static void main(String[] args) {
Person p1 = new Person(1, 18, "Java");
Person p2 = new Person(2, 22, "MySQL");
Person p3 = new Person(3, 6, "Redis");
List<Person> list = new ArrayList<>();
list.add(p1);
list.add(p2);
list.add(p3);
Collections.sort(list);
list.forEach(p -> System.out.println(p.getName() + ":" + p.getAge()));
}
}
@Data
public class Person implements Comparable<Person>{
private int id;
private int age;
private String name;
public Person(int id, int age, String name) {
this.id = id;
this.age = age;
this.name = name;
}
@Override
public int compareTo(Person p) {
return p.getAge()-this.getAge();
}
}
运行结果:
MySQL:22
Java:18
Redis:6
倒叙:传入-当前
如果比较类没有实现Comparable接口,是不可以使用Collections.sort()的
Comparator
public class CompareTest {
public static void main(String[] args) {
Person p1 = new Person(1, 18, "Java");
Person p2 = new Person(2, 22, "MySQL");
Person p3 = new Person(3, 6, "Redis");
List<Person> list = new ArrayList<>();
list.add(p1);
list.add(p2);
list.add(p3);
Collections.sort(list, new PersonComparator());
list.forEach(p -> System.out.println(p.getName() + ":" + p.getAge()));
}
}
@Data
public class Person {
private int id;
private int age;
private String name;
public Person(int id, int age, String name) {
this.id = id;
this.age = age;
this.name = name;
}
}
public class PersonComparator implements Comparator<Person> {
@Override
public int compare(Person p1, Person p2) {
return p2.getAge() - p1.getAge();
}
}
扩展
匿名类
public class CompareTest {
public static void main(String[] args) {
Person p1 = new Person(1, 18, "Java");
Person p2 = new Person(2, 22, "MySQL");
Person p3 = new Person(3, 6, "Redis");
List<Person> list = new ArrayList<>();
list.add(p1);
list.add(p2);
list.add(p3);
list.sort(new Comparator<Person>() {
@Override
public int compare(Person p1, Person p2) {
return p2.getAge() - p1.getAge();
}
});
list.forEach(p -> System.out.println(p.getName() + ":" + p.getAge()));
}
}
@Data
public class Person {
private int id;
private int age;
private String name;
public Person(int id, int age, String name) {
this.id = id;
this.age = age;
this.name = name;
}
}
最大作用:和原来类解耦