jdk1.2新增的接口,位于java.lang包下。在jdk5时Comparable改成了Comparable
功能:用于对象的排序或者对象的分组
介绍:Comparable接口强行对实现它的类的每个实例进行自然排序,该接口的唯一方法compareTo方法被称为自然比较方法;强烈建议自然排序和equals一致(就是两个对象调用compareTo方法和调用equals方法返回的布尔值应该一样)
方法: int compareTo(Object o)
利用当前对象和传入的目标对象进行比较,若是当前对象比目标对象大,则返回1,那么当前对象会排在目标对象的后面
若是当前对象比目标对象小,则返回-1,那么当前对象会排在目标对象的后面
若是两个对象相等,则返回0
private int id;
private int age;
private String name;
public Student() {
}
public Student(int id, int age, String name) {
this.id = id;
this.age = age;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int compareTo(Student o) {
// 降序
// return o.age-this.age;
//升序
return this.age-o.age;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", age=" + age +
", name='" + name + '\'' +
'}';
}
}
public class Test1 {
public static void main(String[] args) {
List<Student> list=new ArrayList<>();
list.add(new Student(1,102,"张三"));
list.add(new Student(3,104,"张三3"));
list.add(new Student(2,103,"张三2"));
list.add(new Student(4,101,"张三4"));
System.out.println("------排序钱-----");
list.forEach(student -> System.out.println(student.toString()));
System.out.println("*******使用默认排序后******");
Collections.sort(list);//这一步是调用student里规定排序的方法
list.stream().forEach(student -> System.out.println(student.toString()));
System.out.println("---------多种比较方法--------");
list.sort(new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
return o2.getId()-o1.getId();
}
});
list.forEach(student -> System.out.println(student.toString()));
}
打印结果:
------排序前 -----
Student{id=1, age=102, name=‘张三’}
Student{id=3, age=104, name=‘张三3’}
Student{id=2, age=103, name=‘张三2’}
Student{id=4, age=101, name=‘张三4’}
*使用默认排序后
Student{id=4, age=101, name=‘张三4’}
Student{id=1, age=102, name=‘张三’}
Student{id=2, age=103, name=‘张三2’}
Student{id=3, age=104, name=‘张三3’}
三种打印结果:
------排序前-----
Student{id=1, age=102, name=‘张三’}
Student{id=3, age=104, name=‘张三3’}
Student{id=2, age=103, name=‘张三2’}
Student{id=4, age=101, name=‘张三4’}
*使用默认排序后
Student{id=4, age=101, name=‘张三4’}
Student{id=1, age=102, name=‘张三’}
Student{id=2, age=103, name=‘张三2’}
Student{id=3, age=104, name=‘张三3’}
---------多种比较方法--------
Student{id=4, age=101, name=‘张三4’}
Student{id=3, age=104, name=‘张三3’}
Student{id=2, age=103, name=‘张三2’}
Student{id=1, age=102, name=‘张三’}