TreeSet

Posted inspred

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TreeSet相关的知识,希望对你有一定的参考价值。

一.TreeSet可以对元素进行排序

前提是元素要具备比较功能

方式一:元素自己具备比较功能,实现Comparable接口,重写compareTo()方法

/**
 * 排序:
 * 先按年龄排序,年龄相同按姓名排序
 * TreeSet可以对Set集合中元素进行排序,
 * TreeSet判断元素唯一的方式:根据比较方法的返回结果是否是0。是0代表相同,就不存
 */
public class Student implements Comparable{

    private String name;

    private Integer age;

    public Student(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public int compareTo(Object o) {

        if (!(o instanceof Person)){
            //如果类型不能转换,不用比较了
            throw new ClassCastException("类型错误");
        }
        Student student = (Student) o;

        if (this.age < student.age){
            return 1;
        }else if(this.age < student.age){
            return -1;
        }else {
           return this.name.compareTo(student.name);
        }
    }
}

测试:

List<Student> list = new ArrayList<>();
        list.add(new Student("ac",12));
        list.add(new Student("ab",13));
        Collections.sort(list);

 

方式二:外部比较器,让集合具备排序功能:实现comparator接口,重写compare()方法

 

/**
 *
 * 创建一个根据person类的name进行排序的比较器
 */
public class ComparatorByName implements Comparator{
    @Override
    public int compare(Object o1, Object o2) {
        Student person1 = (Student) o1;
        Student person2 = (Student) o2;
        int temp = person1.getName().compareTo(person2.getName());

        return temp ==0?person1.getAge()-person2.getAge():temp;
    }
}

 

 

 

测试:

List<Student> list = new ArrayList<>();
        list.add(new Student("ac",12));
        list.add(new Student("ab",13));
        Collections.sort(list,new ComparatorByName());

 

以上是关于TreeSet的主要内容,如果未能解决你的问题,请参考以下文章

[Java基础]TreeSet集合概述和特点

java中treemap和treeset实现(红黑树)

Java集合框架 Set接口实现类--TreeSet概述及使用

Java集合框架 Set接口实现类--TreeSet补充: Comparator接口

关于java中TreeSet类的一些问题

Java集合详解7:HashSet,TreeSet与LinkedHashSet