TreeSet集合的特点:
排序,去重
TreeSet排序的两种方式:
1.自然排序
1.1类实现Comparable
1.2重写compareTo方法
1.3根据方法的返回值,来阻止排序规则
负数:左边走
正数:右边走
0:不存 第一次添加为树根就需要存
2.比较器排序 Comparator
public class TreeSetDemo1 {
/*
TreeSet集合的特点:排序,去重
*/
public static void main(String[] args) {
TreeSet<String> treeSet = new TreeSet<>();
treeSet.add("a");
treeSet.add("a");
treeSet.add("b");
treeSet.add("b");
treeSet.add("c");
treeSet.add("c");
treeSet.add("d");
treeSet.add("d");
//这里展示排序去重的效果
System.out.println(treeSet);
System.out.println("------------------------");
/*
TreeSet集合存储Student学生对象
compareTo 方法的返回值:
0:只有一条[Student{name = 张三, age = 25}]
1:[Student{name = 张三, age = 25}, Student{name = 李四, age = 18}, Student{name = 王五, age = 22}, Student{name = 赵六, age = 23}]
1正序排列 -1倒序排列
所有我们需要在compareTo方法中将返回值的逻辑写一下
return this.age-o.age;
*/
/*
这里是TreeSet排序(自然排序) this.age-o.age
1.类实现Comparable
2.重写compareTo方法
3.根据方法的返回值,来阻止排序规则
负数:左边走
正数:右边走
0:不存 第一次添加为树根就需要存
倒序排序:o.age-this.age
*/
//单单比较年龄是不太好的,String源码实现了Comparable<String>,所以自带了这个类型的compareTo的方法
//compareTo方法进行改变:根据年龄做主要排序,根据姓名做次要排序,判断姓名是否相同
// int ageResult=this.age-o.age;
// int nameResult =ageResult==0?this.name.compareTo(o.name):ageResult;
// int result =nameResult ==0?1:nameResult;
// return result;
TreeSet<Student> ts = new TreeSet<>();
ts.add(new Student("张三",25));
ts.add(new Student("李四",18));
ts.add(new Student("王五",22));
ts.add(new Student("赵六",23));
System.out.println(ts);
System.out.println("----------------------");
//TreeSet排序(比较器排序)比较器排序优先于自然排序
//使用场景:比如String这类泛型的TreeSet进行排序,不满意自然排序的规则,想改的话就可以用比较器重写里面的方法
TreeSet<Student> ts2 = new TreeSet<>(new Comparator<Student>() {
@Override
//o1相当于this o2相当于o
//这里玩一下倒序
public int compare(Student o1, Student o2) {
int AgeResult = o2.getAge()-o1.getAge();
int result = AgeResult==0?o2.getName().compareTo(o1.getName()):AgeResult;
return result;
}
});
ts2.add(new Student("张三",25));
ts2.add(new Student("李四",18));
ts2.add(new Student("王五",22));
ts2.add(new Student("赵六",23));
System.out.println(ts2);
}
}
输出结果:
[a, b, c, d]
------------------------
[Student{name = 李四, age = 18}, Student{name = 王五, age = 22}, Student{name = 赵六, age = 23}, Student{name = 张三, age = 25}]
----------------------
[Student{name = 张三, age = 25}, Student{name = 赵六, age = 23}, Student{name = 王五, age = 22}, Student{name = 李四, age = 18}]