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

文章目录

  • 1. Comparable 和 Comparator区别比较
  • 2. `TreeSet`有两种实现指定排序规则的方式:


在这里插入图片描述

1. Comparable 和 Comparator区别比较


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


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


Comparable


实现Comparable接口


重写ComparableTo



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

  1. 在存储类本身中实现 Comparable 接口,并实现该接口的 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 接口的非自定义类,我们可以不用自己实现其排序规则。

    当两种方式都指定了,会优选使用Comparator。



    在这里插入图片描述

    你可能感兴趣的:(Java,java,算法,开发语言)