方式一:默认排序/自然排序:Javabean类实现Comparable接口指定比较规则
首先我们需要建立一个student类,实现实现Comparable接口,比较规则需要重写接口中的方法:
具体代码如下:
public class Student implements Comparable<Student>{
private String name;
private int age;
public Student() {}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public int compareTo(Student o) {
return this.getAge() - o.getAge();
}
}
具体插入见以下分析:
方式二:当默认的排序规则无法满足我们的需求的时候,我们需要使用比较器排序:
创建TreeSet对象时候,传递比较器Comparator指定规则
我们在TreeSet的构造器介绍中可以看到这种方法的实现
import java.util.*;
public class test {
public static void main(String[] args) {
/**
* 需求:请自行选择比较器排序和自然排序两种方式:
* 要求:存入四个字符串,“c”,“ab”,“df”,“qwer”
* 按照长度排序,如果一样长则按照首字母排序
* 采取第二种排序方式:比较器排序
*/
//1.创建集合
// o1: 表示当前要添加的元素
// o2: 表示已经在红黑树存在的元素
// 返回值规则跟之前是一样的
TreeSet<String> ts = new TreeSet<>(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
// 按照长度排序, 计算两个的长度差
int i = o1.length() - o2.length();
//如果一样长则按照默认的首字母排序,不一样长按照长度排序
return i == 0 ? o1.compareTo(o2) : i;
}
});
// 2.添加元素
ts.add("c");
ts.add("ab");
ts.add("df");
ts.add("qwer");
// 3.打印集合
System.out.println(
ts
);
}
}