1.TreeSet存储,遍历
1.按照字典顺序排序,并且去重复
1 TreeSet<Integer> treeSet = new TreeSet<>(); 2 treeSet.add(2); 3 treeSet.add(5); 4 treeSet.add(4); 5 treeSet.add(2); 6 treeSet.add(4); 7 treeSet.add(8); 8 treeSet.add(9); 9 10 11 for (Integer integer : treeSet) { 12 System.out.print(integer + " "); 13 } 14 //输出结果为 2 4 5 8 9
1 TreeSet<String> treeSet = new TreeSet<>(); 2 treeSet.add("a"); 3 treeSet.add("b"); 4 treeSet.add("c"); 5 treeSet.add("b"); 6 7 8 for (String string : treeSet) { 9 System.out.print(string + " "); 10 } 11 //输出结果为 a b c
2.treeset自定义对象方法
存储自定义对象时,需要在自定义对象中继承 Comparable接口,
并在类中重写CompareTo方法
1 public int compareTo(Student s) { 2 int num = this.age - s.age;
//结果相等时,也就是为0时,就不存储
//结果为负数,就时倒述,从大到小
//结果为正数,就是正述,从小到大
3 return num==0? this .name.compareTo(s.name): num; 4 }
1 //Comparator比较器,需要在自定义类上继承Comparator接口
在重写compare()方法
需要在主类创建集合对象时在最后的括号中添加(new 对象)
public int compare(Student s, Student s1) { 2 int num = s.age - s1.age; 3 int num1 = s.age1 - s1.age1; 4 return num==0?num1:num ; 5 }
3. treeset自定义对象排序原理
二叉排序树,输出规律,先输出左子数,在根,在输出右子数,比根小就放在左边,比根大就放在右边
4.TreeSet原理
特点:TreeSet是用来排序的,可以指定一个顺序,对象存入后会按照指定的顺序排列
使用方法:
自然排序(Comparable)
TreeSet类的add()方法中会把存入的对象提升为Comparable类型
调用对象的compareTo()方法,和集合中的对象进行比较
根据compareTo()方法返回的结果进行存储
比较器顺序(Comparator)
创建TreeSet的时候可以指定一个 Comparator
如果传入Comparator的子类对象,那么TreeSet就会按照比照器中的顺序比较
add()方法内部会自动调用 Comparator 接口中的 compare方法的第二参数
两种方式的区别
TreeSet构造函数什么都不传,默认按照类中的Comparable的顺序(没有就报错ClassCastException)
TreeSet如果传入 Comparator,就先按照Comparator