目录
在日常的刷题或开发中,很多时候我们需要对数据进行排序,以达到我们的预期效果的作用。那么这些排序方法具体怎么实现和使用呢?本文就来好好缕一缕,总结一下这些方法:
Comparable && Comparator的使用:
Comparable:
当我们对类中的对象进行比较时,要保证对象时可比较的,这时我们就需要用到Comparable 或 Comparator接口,然后重写里面的compareTo()方法。假设我们有一个学生类,默认需要按照学生的年龄age排序,具体实现如下:
class Student implements Comparable<Student>{
private int id;
private int age;
private String name;
public Student(int id, int age, String name) {
this.id = id;
this.age = age;
this.name = name;
}
@Override
public int compareTo(Student o) {
//降序
//return o.age - this.age;
//升序
return this.age - o.age;
}
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 String toString() {
return "Student{" +
"id=" + id +
", age=" + age +
", name='" + name + '\'' +
'}';
}
}
这里说一下 public int compareTo(Student o) 方法,它返回三种 int
类型的值: 负整数,零 ,正整数:
返回值 | 含义 |
正整数 | 当前对象的值 > 比较对象的值,升序排序 |
零 | 当前对象的值 = 比较对象的值,不变 |
负整数 | 当前对象的值 < 比较对象的值,降序排序 |
测试:
public class SortTest {
public static void main(String[] args) {
List<Student> list = new ArrayList<>();
list.add(new Student(103,25,"关羽"));
list.add(new Student(104,21,"张飞"));
list.add(new Student(108,18,"刘备"));
list.add(new Student(101,32,"袁绍"));
list.add(new Student(109,36,"赵云"));
list.add(new Student(103,16,"曹操"));
System.out.println("排序前:");
for(Student student : list){
System.out.println(student.toString());
}
System.out.println("默认排序后:");
Collections.sort(list);
for(Student student : list){
System.out.println(student.toString());
}
}
}
运行结果:
排序前:
Student{id=103, age=25, name='关羽'}
Student{id=104, age=21, name='张飞'}
Student{id=108, age=18, name='刘备'}
Student{id=101, age=32, name='袁绍'}
Student{id=109, age=36, name='赵云'}
Student{id=103, age=16, name='