自定义容器排序规则
-
继承并重写
Comparable<?>
接口 -
向排序函数中传入比较器
package LeetCode; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; /** * @ClassName TestComperator * @Description 自定义排序规则 * 1.继承并重写Comparable接口 * 2.传入一个比较器 * @Author m * @Version 1.0 */ class Person implements Comparable<Person>{ int age; String name; @Override public String toString() { return "Person{" + "age=" + age + ", name='" + name + '\'' + '}'; } public Person() { } public Person(int age, String name) { this.age = age; this.name = name; } //重写比较器,按年龄从小到大,姓名从小到大 @Override public int compareTo(Person o) { if(age != o.age){ return age-o.age; }else { return name.compareTo(o.name); } } } public class TestComperator { public static void main(String[] args) { List<Person> list = new ArrayList<>(); list.add(new Person(1, "zli")); list.add(new Person(2, "ayy")); list.add(new Person(2, "bob")); Collections.sort(list, new Comparator<Person>() { //年龄从大到小,姓名从小到大 @Override public int compare(Person o1, Person o2) { if(o2.age != o1.age){ return o2.age-o1.age; }else { return o1.name.compareTo(o2.name); } } }); System.out.println("年龄从大到小,姓名从小到大"); for (Person person : list) { System.out.println(person); } System.out.println("年龄从小到大,姓名从小到大"); Collections.sort(list); for (Person person : list) { System.out.println(person); } } }
注意事项:
当你的自定义类即重写了Comparable接口,也传入了比较器时,以比较器为准
运行结果