一、TreeSet
  1.当使用无参构造器,创建TreeSet时,仍然是无序的。 
 
  2.若希望添加的元素有序,需要使用TreeSet提供的构造器,传入一个比较器。 
 
      该比较器是一个接口,里面有一个方法叫compare(),传入一个实现该接口的类(匿名内部类) 
 
      而且可见,TreeSet构造器在底层其实是new一个TreeMap() 
 
 
 
 
 
 
 
 
 
 
 底层: 
 
  add(): 
 
      调用底层TreeMap的put()方法 
 
 
 
二、TreeMap
 
     底层为红黑树 
 
 
 源码: 
 
 
 构造器: 
 
      无参: 
 
          直接将comparator置为null。 
 
 
 
      有参: 
 
          参数为实现Comparator接口的类: 
 
 
 
  put: 
 
      如果root为null,即第一次加入,则直接加入 
 
      否则,将comparater赋值给cpr 
 
          若cpr不为空,则: 
 
              根据compare()进行判断,若等于0,则重新设置value,并返回旧值。 
 
 
 
          若cpr为空,则: 
 
              key为null,则抛出异常 
 
              key不为null,则采用默认的比较方法, 
 
              先将key转变成Comparable对象,如果Key实现了该对象,则可以转,String、包装类等都有实现该接口。 
 
                  没有实现则会报错。 
 
              然后执行Key对象自身的compareTo()函数。 
 
              例如,两个String进行比较则调用String的compare()方法。 
 
                          
 若两个key无法比较则会报错。 
 
 
 
      然后设置改该节点为对应的左子树或右子树 
 
      再然后调用fixAfterInsertion()方法就是对这棵树进行调整、平衡。 
 
      最后size++    modCount++ 
 
 
 
  compare: 
 
 
        



















