1,TreeSet集合的 特点:

  1. 无索引;
  2. 不能重复;
  3. 无顺序;
  4. 主要作用是:进行排序;(且一定是排序,默认是自然排序
  5. 底层原理是红黑树,有两种排序方式:
    1. 自然排序;(默认是,从小到大排序);
    2. 使用比较器进行排序;(可以规定排序规则)

注意:在日常工作中不使用TreeSet集合进行排序,而在数据库中进行排序;

2,TreeSet集合的 使用:

1,创建集合:

  1. TreeSet<Integer> treeSet1 = new TreeSet<>();
  1. 自然排序:
    1. 数字的自然排序规则:默认是从小到大;
    2. 字符串的自然排序规则:默认是按照字母表的顺序; ```java //数字的排序: treeSet1.add(29); treeSet1.add(78); treeSet1.add(67); treeSet1.add(86); //默认自然排序,且一定会排序 System.out.println(treeSet1); [29, 67, 78, 86]

//字符串的排序: treeSet1.add(“ad”); treeSet1.add(“dga”); treeSet1.add(“gd”); treeSet1.add(“ah”); System.out.println(treeSet1);

  1. 2. 使用比较器进行排序:(Comparator
  2. ```java
  3. //创建集合并重写比较器接口:
  4. //匿名内部类:
  5. TreeSet<Integer> t1 = new TreeSet<>(new Comparator<Integer>() {
  6. @Override
  7. public int compare(Integer o1, Integer o2) {
  8. return o1 - o2;
  9. }
  10. });
  11. t1.add(42);
  12. t1.add(75);
  13. t1.add(76);
  14. t1.add(98);
  15. System.out.println(t1);

3,集合中储存自定义对象的排序:

  1. 使用场景:当无法进行自然排序时,就必须构建自定义排序;
    1. 如,学生姓名的排序,系统无法识别排序的内容;
  2. 自然排序的规则设计定义:让自定义的类实现Comparatable的接口并重写里面的compareTo方法来定义比较规则; ```java //Student类(自定义类): //自然排序: //记得要实现接口啊,imlements Comparable; @Override public int compareTo(Object o) { //强转为子类对象 Student s= (Student) o; //降序: // return s.age - this.age; //升序: return this.age - s.age; }
  1. 3. 比较器排序的规则设计定义:TreeSet集合有参数构造器,直接设置Comparator接口对应的比较器对象,来定义比较规则(常用);
  2. ```java
  3. //创建集合的同时,实现接口
  4. //匿名内部类实现接口Comparator
  5. TreeSet<Student> set1=new TreeSet<>(new Comparator<Student>() {
  6. @Override
  7. public int compare(Student o1, Student o2) {
  8. return o1.getAge() - o2.getAge();
  9. }
  10. });
  1. 多条件排序:<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/25975946/1644803302869-d517f5b0-f4e9-473f-b428-2761f42d25c1.png#clientId=u5dfaaadc-00d3-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=623&id=u15e1c84d&margin=%5Bobject%20Object%5D&name=image.png&originHeight=623&originWidth=1085&originalType=binary&ratio=1&rotation=0&showTitle=false&size=370832&status=done&style=none&taskId=u2e907c25-f26f-4876-8f50-4ff70c69295&title=&width=1085)