【Java】Java核心要点总结 65:TreeSet 两种排序

简介: 1. Comparable 和 Comparator区别比较Comparable 是排序接口,若一个类实现了Comparable接口,就意味着“该类支持排序”。Comparator 是比较器,我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。Comparable相当于“内部比较器”,而Comparator相当于“外部比较器”。

1. Comparable 和 Comparator区别比较

Comparable 是排序接口,若一个类实现了Comparable接口,就意味着“该类支持排序”。Comparator 是比较器,我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。



Comparable相当于“内部比较器”,而Comparator相当于“外部比较器”。

Comparable

实现Comparable接口

重写ComparableTo

2. TreeSet有两种实现指定排序规则的方式:

  1. 在存储类本身中实现 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;
    }
}
  1. 在声明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。

相关文章
|
3月前
|
算法 Java
在排序数组中查找元素的第一个和最后一个位置(Java详解)
在排序数组中查找元素的第一个和最后一个位置(Java详解)
39 0
|
2月前
|
Java
如何使用 Java 8 进行字符串排序?
【2月更文挑战第21天】
75 3
|
3月前
|
Java
Java排序
【2月更文挑战第7天】【2月更文挑战第17篇】List对象集合自定义排序,列出了以前的用法以及新用法。
27 0
|
3月前
|
存储 Java
Java TreeMap:基于红黑树的排序映射解析
Java TreeMap:基于红黑树的排序映射解析
|
3月前
|
安全 Java
Java TreeSet:基于红黑树的排序集合解析
Java TreeSet:基于红黑树的排序集合解析
|
3月前
|
Java
Java对list集合元素进行排序的几种方式
Java对list集合元素进行排序的几种方式
27 0
|
3月前
|
Java
java 实现Comparable接口排序,升序、降序、倒叙
java 实现Comparable接口排序,升序、降序、倒叙
22 0
|
3月前
|
存储 搜索推荐 算法
Java数组全套深入探究——进阶知识阶段3、sort自然排序
Java数组全套深入探究——进阶知识阶段3、sort自然排序
10 0
|
3月前
|
搜索推荐 Java
JAVA排序之选择排序 带图和code
JAVA排序之选择排序 带图和code
20 0
JAVA排序之选择排序 带图和code
|
4月前
|
Java Go C++
Golang每日一练(leetDay0116) 路径交叉、回文对
Golang每日一练(leetDay0116) 路径交叉、回文对
31 0
Golang每日一练(leetDay0116) 路径交叉、回文对