Bootstrap

重写comparable和comparator方法

在TreeSet和TreeMap集合里元素是有序的,默认使用Comparable进行升序排序,也可以对方法进行重写满足自己需要的排序规则

Comparable用于对象的自我比较,适用于有明确自然顺序的情况。如数字的大小,字符串的字典顺序

Comparator用于外部定制比较逻辑,适用于需要自定义排序规则或类没有自然顺序的情况。

 以学生类为例对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 String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public int compareTo(Student o) {
        //按照对象的年龄进行排序
        //主要判断条件: 按照年龄从小到大排序
        int result = this.age - o.age;
        //次要判断条件: 年龄相同时,按照姓名的字母顺序排序
        result = result == 0 ? this.name.compareTo(o.getName()) : result;
        return result;
    }
} 

重写Comparato,在创建具体集合的时候进行重写

public class MyTreeSet4 {
    public static void main(String[] args) {
      	//创建集合对象
        TreeSet<Teacher> ts = new TreeSet<>(new Comparator<Teacher>() {
            @Override
            public int compare(Teacher o1, Teacher o2) {
                //o1表示现在要存入的那个元素
                //o2表示已经存入到集合中的元素
              
                //主要条件,判断年龄大小
                int result = o1.getAge() - o2.getAge();
                //次要条件,对姓名进行排序
                result = result == 0 ? o1.getName().compareTo(o2.getName()) : result;
                return result;
            }
        });
    }
}

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;