目录

Life in Flow

知不知,尚矣;不知知,病矣。
不知不知,殆矣。

X

Comparable排序接口

Comparable

  • 是 ⼀个接 ⼝,定制排序规则。
  • 对实现它的每个类的对象进 ⾏整体排序,⾥ ⾯ compareTo ⽅法是实现排序的具体 ⽅法。
  • 比如 TreeSet、SortedSet、Collections.sort() ⽅法调 ⽤进 ⾏排序。
  • String、Integer 等类默认实现了这个接 ⼝,所以可以排序(看源码)。
  • Comparable 适合于排序规则固定的情况,Comparator(匿名内部类)适合于排序规则变化的情况。
1public interface Comparable<T> {
2    public int compareTo(T o);
3}

POJO 类需要实现 Comparable 接口

 1package com.javase.demo;
 2
 3import lombok.AllArgsConstructor;
 4import lombok.Data;
 5@AllArgsConstructor
 6@Data
 7public class Student implements Comparable{
 8    private String name;
 9    private int age;
10
11    @Override
12    public int compareTo(Object o) {
13        if(o instanceof Student){
14            Student student = (Student) o;
15            return this.age - student.age;//升序
16	    //return student.age - this.age; //降序
17        }
18        //返回数0代表两个对象相等
19	//⼤于0, 表示this⼤于传进来的对象o ,则往后排,即升序
20	//⼩于0,表示this⼩于传进来的对象o
21        return 0;
22    }
23}

根据学生年龄进行排序

1@Test
2    public void comparableTesting() {
3        Set<Student> studentSet = new TreeSet<>();
4        studentSet.add(new Student("a", 15));
5        studentSet.add(new Student("b", 12));
6        studentSet.add(new Student("c", 22));
7
8        System.out.println(studentSet);//[Student(name=b, age=12), Student(name=a, age=15), Student(name=c, age=22)]
9    }

作者:Soulboy