1,TreeSet集合的 特点:
- 无索引;
- 不能重复;
- 无顺序;
- 主要作用是:进行排序;(且一定是排序,默认是自然排序)
- 底层原理是红黑树,有两种排序方式:
- 自然排序;(默认是,从小到大排序);
- 使用比较器进行排序;(可以规定排序规则)
注意:在日常工作中不使用TreeSet集合进行排序,而在数据库中进行排序;
2,TreeSet集合的 使用:
1,创建集合:
TreeSet<Integer> treeSet1 = new TreeSet<>();
- 自然排序:
- 数字的自然排序规则:默认是从小到大;
- 字符串的自然排序规则:默认是按照字母表的顺序; ```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);
2. 使用比较器进行排序:(Comparator)
```java
//创建集合并重写比较器接口:
//匿名内部类:
TreeSet<Integer> t1 = new TreeSet<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1 - o2;
}
});
t1.add(42);
t1.add(75);
t1.add(76);
t1.add(98);
System.out.println(t1);
3,集合中储存自定义对象的排序:
- 使用场景:当无法进行自然排序时,就必须构建自定义排序;
- 如,学生姓名的排序,系统无法识别排序的内容;
- 自然排序的规则设计定义:让自定义的类实现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; }
3. 比较器排序的规则设计定义:TreeSet集合有参数构造器,直接设置Comparator接口对应的比较器对象,来定义比较规则(常用);
```java
//创建集合的同时,实现接口
//匿名内部类实现接口Comparator
TreeSet<Student> set1=new TreeSet<>(new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
return o1.getAge() - o2.getAge();
}
});
多条件排序:<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)