TreeSet

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     

          

原文地址:https://www.cnblogs.com/xsh726/p/11418430.html