TreeSet底层是二叉树,小的存储在左边(小的是指负数),大的存储在右边(大的是指正数),相等就不存(不存指的是0),说的是compareTo方法,在TreeSet集合如何存储元素取决于compareTo方法的返回值
当person类没有实现Comparable接口中compareTo方法时,会报java.lang.ClassCastException异常错误
当compareTo方法返回0的时候集合中只有一个元素(先储存的元素相当于树根,不走compareTo方法)
person类实现的compareTo方法
测试代码:
public class Demo2_TreeSet {
public static void main(String[] args) {
// TODO Auto-generated method stub
TreeSet<person> ts=new TreeSet<>();
ts.add(new person("张三", 23));
ts.add(new person("李四", 13));
ts.add(new person("王五", 43));
ts.add(new person("小五", 43));
ts.add(new person("赵六", 33));
System.out.println(ts);
}
}
返回结果:
[person [name=张三, age=23]]
当compareTo方法返回正数的时候,集合会怎么存就怎么取元素
person类实现的compareTo方法
测试代码:
public class Demo2_TreeSet {
public static void main(String[] args) {
// TODO Auto-generated method stub
TreeSet<person> ts=new TreeSet<>();
ts.add(new person("张三", 23));
ts.add(new person("李四", 13));
ts.add(new person("王五", 43));
ts.add(new person("小五", 43));
ts.add(new person("赵六", 33));
System.out.println(ts);
}
}
返回结果:
[person [name=张三, age=23], person [name=李四, age=13], person [name=王五, age=43], person [name=小五, age=43], person [name=赵六, age=33]]
当compareTo方法返回负数的时候,集合会倒序存储
person类实现的compareTo方法
测试代码:
public class Demo2_TreeSet {
public static void main(String[] args) {
// TODO Auto-generated method stub
TreeSet<person> ts=new TreeSet<>();
ts.add(new person("张三", 23));
ts.add(new person("李四", 13));
ts.add(new person("王五", 43));
ts.add(new person("小五", 43));
ts.add(new person("赵六", 33));
System.out.println(ts);
}
}
运行结果:
[person [name=赵六, age=33], person [name=小五, age=43], person [name=王五, age=43], person [name=李四, age=13], person [name=张三, age=23]]
按照元素里的字段进行比较排序
person类实现的compareTo方法
测试代码:
public class Demo2_TreeSet {
public static void main(String[] args) {
// TODO Auto-generated method stub
TreeSet<person> ts=new TreeSet<>();
ts.add(new person("张三", 23));
ts.add(new person("李四", 13));
ts.add(new person("王五", 43));
ts.add(new person("小五", 43));
ts.add(new person("赵六", 33));
System.out.println(ts);
}
}
返回结果:
[person [name=李四, age=13], person [name=张三, age=23], person [name=赵六, age=33], person [name=小五, age=43], person [name=王五, age=43]]