学习Day1:TreeSet 的使用和重写Comparator比较器

tips:集合中最难的两个应用场景之一

应用场景:

我们知道TreeSet实现了Set接口,可以去重内容相同的元素。比如存入Integer类型的两个数据,6和6,遍历输出,只会输出一个6。但是对于自定义类,添加进TreeSet如何排序?

答:直接添加进去,会报错!需要重写其Comparator方法,才可比较!


代码展示:

直接上代码,感受一下:

使用了匿名内部类,不知道的伙伴要补一补知识。直接使用这个模板也是可以的,根据什么排序,就使用什么来做减法。等于0时会去重,正数会从小到大排序,负数会从大到小排序。

public class TreeSet_ {

    public static void main(String[] args) {

        TreeSet myPerson = new TreeSet(new Comparator() {
            @Override
            public int compare(Person o1, Person o2) {
                return o1.getAge()-o2.getAge();
            }
            //返回0,去重(注意!);返回正数,正序;返回负数,逆序。
        });
        myPerson.add(new Person("高垚淼", 29));
        myPerson.add(new Person("高垚淼2", 28));
        myPerson.add(new Person("高垚淼3", 31));

        for (Person p : myPerson) {
            System.out.println(p);
        }


    }
}
//当传入一个类时,treeSet并不知道如何比较,需要重写比较器
class Person {
    private String name;
    private int age;

    public Person(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 "person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

你可能感兴趣的:(学习)