的 可比 接口提供的compareTo() 为对象的排序方法。这种排序称为类的 自然排序,而compareTo()方法称为其自然比较方法。该比较器 接口提供了用于执行方法的排序操作。通过使用Comparator 接口,我们可以执行多个排序序列。我们可以针对多个数据成员对对象进行排序。
compareTo()方法将此对象与o1对象进行比较,并返回一个integer。
public int compareTo(Object o1)
仅当此对象小于o1时,&才返回–ve数字。
仅当此对象大于o1时,&才返回+ ve数字。
仅当此对象等于o1时,&才返回0。
import java.util.*; class Employee implements Comparable { String name; int age; Employee(String name, int age) { this.name = name; this.age = age; } //覆盖compareTo方法 @Override public int compareTo(Object o) { return this.age - ((Employee) o).age; } } public class ComparableDemo { public static void main(String[] args) { //创建 List list = new ArrayList<>(); //插入 list.add(new Employee("Krishna", 30)); list.add(new Employee("Archana", 28)); list.add(new Employee("Vineet", 25)); list.add(new Employee("Ramesh", 38)); list.add(new Employee("Alok", 28)); System.out.println("Before 排序: "); for (Employee e : list) { System.out.print("[ EMP : age = " + e.age + " ] "); } //排序 Collections.sort(list); System.out.println("After 排序: "); for (Employee e : list) { System.out.print("[ EMP : age = " + e.age + " ] "); } } }
输出结果
Before 排序: [ EMP : age = 2 ] [ EMP : age = 33 ] [ EMP : age = 11 ] [ EMP : age = 34 ] [ EMP : age = 7 ] After 排序: [ EMP : age = 2 ] [ EMP : age = 7 ] [ EMP : age = 11 ] [ EMP : age = 33 ] [ EMP : age = 34 ]
compare()方法将第一个对象与第二个对象进行比较,并返回一个整数
public int compare (Object o1,Object o2)
仅当o1小于o2时&才返回–ve数字
仅当o1大于o2时&才返回+ ve数字
仅当o1等于o2时&才返回0
import java.util.*; class Student { String name; int age, roll; Student(String name, int age, int roll) { this.name = name; this.age = age; this.roll = roll; } } class AgeComparator implements Comparator { @Override public int compare(Object o1, Object o2) { return ((Student) o1).age - ((Student) o2).age; } } class RollComparator implements Comparator { @Override public int compare(Object o1, Object o2) { return ((Student) o1).roll - ((Student) o2).roll; } } public class ComparatorDemo { public static void main(String[] args) { List list = new ArrayList<>(); list.add(new Student("Ramesh", 30, 20)); list.add(new Student("Adithya", 7, 10)); list.add(new Student("Krishna", 25, 5)); list.add(new Student("Vineet", 24, 15)); System.out.println("BEFORE 排序"); for (Student e : list) { System.out.println("[ STU : name = " + e.name + " age = " + e.age + " roll = " + e.roll + "]"); } Collections.sort(list,new AgeComparator()); System.out.println("AFTER 排序 WITH AGE"); for (Student e : list) { System.out.println("[ STU : name = " + e.name + " age = " + e.age + " ]"); } Collections.sort(list,new RollComparator()); System.out.println("AFTER 排序 WITH ROLL"); for (Student e : list) { System.out.println("[ STU : name = " + e.name + " roll = " + e.roll + " ]"); } } }
输出结果
BEFORE 排序 [ STU : name = Ramesh age = 30 roll = 20 ] [ STU : name = Adithya age = 7 roll = 10 ] [ STU : name = Krishna age = 25 roll = 5 ] [ STU : name = Vineet age = 24 roll = 15 ] AFTER 排序 WITH AGE [ STU : name = Adithya age = 7 ] [ STU : name = Vineet age = 24 ] [ STU : name = Krishna age = 25 ] [ STU : name = Ramesh age = 30 ] AFTER 排序 WITH ROLL [ STU : name = Krishna roll = 5 ] [ STU : name = Adithya roll = 10 ] [ STU : name = Vineet roll = 15 ] [ STU : name = Ramesh roll = 20 ]