package J_TreeSet;
import java.util.Objects;
public class B_Student implements Comparable<B_Student>{
private String name;
private int age;
public B_Student() {
}
public B_Student(String name, int age) {
this.name = name;
this.age = age;
}
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;
}
@Override
public String toString() {
return "A_Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
///this:表示当前要添加的元素
///o:表示已经在红黑树存在的元素 会依次比对
public int compareTo(B_Student o) {
//指定排序的规则
//只看年龄,我想要按照年龄的升序进行排列
System.out.println("--------------------");
System.out.println("this:"+this);
System.out.println("o:"+o);
return this.getAge()-o.getAge();
/// 返回值
/// 正数:表示当前要添加的元素是大的,存右边
/// 负数:表示当前要添加的元素是小的,存左边
}
}
package J_TreeSet;
import java.util.TreeSet;
public class B_Test {
public static void main(String[] args) {
/*
需求:创建TreeSet集合,并添加3个学生对象
学生对象属性:
姓名,年龄。
要求按照学生的年龄进行排序
同年龄按照姓名字母排列(暂不考虑中文)
同姓名,同年龄认为是同一个人
方式一:
默认的排序规则/自然排序
让JavaBean实现一个接口parable接口,重写里面的抽象方法再指定规则
*/
//1.创建三个学生对象
B_Student s1 = new B_Student("zhangsan",23);
B_Student s2 = new B_Student("lisi",24);
B_Student s3 = new B_Student("wangwu",25);
B_Student s4 = new B_Student("zhaoliu",26);
//2.创建集合对象
TreeSet<B_Student> ts = new TreeSet<>();
///此时我们创建的是treeSet的对象,底层是红黑树!
/// 需要重写HashCode与equals方法的是哈希表相关的
/// 使用红黑树需要在JavaBean指定排序规则
//3.添加元素
ts.add(s3);
ts.add(s2);
ts.add(s1);//s1添加后红黑树不平衡,自动旋转转换根节点
//4.打印集合
//System.out.println(ts);
/*
--------------------
this:A_Student{name='wangwu', age=25}
o:A_Student{name='wangwu', age=25}
--------------------
this:A_Student{name='lisi', age=24}
o:A_Student{name='wangwu', age=25}
--------------------
this:A_Student{name='zhangsan', age=23}
o:A_Student{name='wangwu', age=25}
--------------------
this:A_Student{name='zhangsan', age=23}
o:A_Student{name='lisi', age=24} 二次调用compareTo方法
*/
ts.add(s4);//添加这个开始 出现一下情况
/*
--------------------
this:A_Student{name='wangwu', age=25}
o:A_Student{name='wangwu', age=25}
--------------------
this:A_Student{name='lisi', age=24}
o:A_Student{name='wangwu', age=25}
--------------------
this:A_Student{name='zhangsan', age=23}
o:A_Student{name='wangwu', age=25}
--------------------
this:A_Student{name='zhangsan', age=23}
o:A_Student{name='lisi', age=24}
--------------------*////<---- 从这里开始树旋转自动调整
/* this:A_Student{name='zhaoliu', age=26}
o:A_Student{name='lisi', age=24}*//// <------ 这里的根节点就不是name='wangwu', age=25了
/* --------------------
this:A_Student{name='zhaoliu', age=26}
o:A_Student{name='wangwu', age=25}*/
}
}