1.TreeSet集合的特点是怎么样的?
可排序、不重复、无索引
底层基于红黑树实现排序,增删改查性能较好
2.Treeset集合自定义排序规则有几种方式
方式一:Javabean类实现Comparable接口,指定比较规则
方式二:创建集合时,自定义Comparator比较器对象,指定比较规则
3.方法返回值的特点
负数:表示当前要添加的元素是小的,存左边
正数:表示当前要添加的元素是大的,存右边
0:表示当前要添加的元素已经存在,舍弃
例一
import java.util.Comparator; import java.util.TreeSet; public class Tree { public static void main(String[] args) { //存入四个字符串,"c",ab,df,qwer //按照长度排数,如果一样长则按照首字母排序 //比较器排序 //1.创建集合 TreeSet<String> ts = new TreeSet<>(new Comparator<String>() { @Override public int compare(String o1, String o2) { int i = o1.length() - o2.length(); i = i == 0 ? o1.compareTo(o2) : i; return i; } }); //2.添加元素 ts.add("c"); ts.add("ab"); ts.add("fd"); ts.add("qwer"); //打印集合 System.out.println(ts); } }
例二
import java.util.TreeSet; public class Main { public static void main(String[] args) { //1创建学生对象 Student s1 = new Student("zhangsan",23,90,99,50); Student s2 = new Student("lisi",24,90,98,50); Student s3 = new Student("wangwu",25,95,100,30); Student s4 = new Student("zhaoliu",23,80,99,70); Student s5 = new Student("qianqi",23,90,80,80); //2创建集合 TreeSet<Student> ts = new TreeSet<>(); //3.添加元素 ts.add(s1); ts.add(s2); ts.add(s3); ts.add(s4); ts.add(s5); for (Student t : ts) { System.out.println(t); } } }
public class Student implements Comparable<Student> { private String name; private int age; private int Chinese; private int Math; private int English; public Student() { } public Student(String name, int age, int chinese, int math, int english) { this.name = name; this.age = age; Chinese = chinese; Math = math; English = english; } 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; } public int getChinese() { return Chinese; } public void setChinese(int chinese) { Chinese = chinese; } public int getMath() { return Math; } public void setMath(int math) { Math = math; } public int getEnglish() { return English; } public void setEnglish(int english) { English = english; } @Override public String toString() { return "student{" + "name='" + name + '\'' + ", age=" + age + ", Chinese=" + Chinese + ", Math=" + Math + ", English=" + English + '}'; } //按照总分从高到低输出到控制台如果总分一样, // 按照语文成绩排如果语文一样, // 按照数学成绩排如果数学成绩一样, // 按照英语成绩排如果英文成绩一样, // 按照年龄排如果年龄一样, // 按照姓名的字母顺序排如果都一样,认为是同一个学生,不存。 @Override public int compareTo(Student o) { int sum1 = this.getChinese() + this.getMath() + this.getEnglish(); int sum2 = o.getChinese() + o.getMath() + o.getEnglish(); int i = sum1 - sum2; i = i == 0 ? this.getChinese() - o.getChinese() : i; i = i == 0 ? this.getMath() - o.getMath() : i; i = i == 0 ? this.getEnglish() - o.getEnglish() : i; i = i == 0 ? this.age - this.age : i; i = i == 0 ? this.getName().compareTo(o.getName()): i; return i; } }