文章目录
- 1. Comparable 和 Comparator区别比较
- 2. `TreeSet`有两种实现指定排序规则的方式:
1. Comparable 和 Comparator区别比较
Comparable 是排序接口,若一个类实现了Comparable接口,就意味着“该类支持排序”。Comparator 是比较器,我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。
Comparable相当于“内部比较器”,而Comparator相当于“外部比较器”。
Comparable
实现Comparable接口
重写ComparableTo
2. TreeSet
有两种实现指定排序规则的方式:
- 在存储类本身中实现
Comparable<Object>
接口,并实现该接口的 public int compareTo(Object o) 方法;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student implements Comparable<Student>{
private Integer id;
private Integer age;
private String name;
@Override
public int compareTo(Student student) {
int result = this.id - student.getId();
return result;
}
}
- 在声明
TreeSet
时用匿名内部类的方式实现。
TreeSet<Student> treeSet = new TreeSet<>(new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
return o1.getAge() - o2.getAge();
}
});
当我们往 TreeSet
中存储 String,Integet ,Long 等本身实现了 Comparable<Object>
接口的非自定义类,我们可以不用自己实现其排序规则。
当两种方式都指定了,会优选使用Comparator。