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集合框架 Set接口实现类--TreeSet概述及使用