码迷,mamicode.com
首页 > 其他好文 > 详细

TreeSet

时间:2018-07-03 22:34:00      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:ast   方法   treeset   setname   turn   over   oid   nbsp   array   

一.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

标签:ast   方法   treeset   setname   turn   over   oid   nbsp   array   

原文地址:https://www.cnblogs.com/inspred/p/treeSet.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!