• 源码解读 ```java public static void main(String[] args) {

      1. TreeSet treeSet = new TreeSet(new Comparator() {
      2. @Override
      3. public int compare(Object o1, Object o2) {
      4. // 调用String的compareTo进行字符串大小比较
      5. // return ((String) o1).compareTo((String) o2);
      6. // 按照长度大小进行排序
      7. return ((String)o2).length() - ((String)o1).length();
      8. }
      9. }
      10. );
      11. treeSet.add("tom");
      12. treeSet.add("jack");
      13. treeSet.add("hw");
      14. treeSet.add("A");
      15. System.out.println("treeSet = " + treeSet);

      }

    / 1.当我们使用无参构造,创建TreeSet时,仍然是无序的 2.希望添加的元素,按照字符串大小来排序: 使用TreeSet提供的一个构造器,可以传入一个比较器(匿名内部类,并指定排序规则) /

    // 1.构造器把传入的比较器对象,赋给了TreeSet的底层TreeMap的属性this.comparator public TreeMap(Comparator<? super K> comparator) { this.comparator = comparator; }

    // 2.在调用 treeSet.add(“tom”),在底层会执行到 if (cpr != null) { // cpr就是我们的匿名内部类(对象) do { parent = t; // 动态绑定到我们的匿名内部类(对象)compare cmp = cpr.compare(key, t.key); if (cmp < 0) t = t.left; else if (cmp > 0) t = t.right; else // 如果相等,即返回0,这个Key就没有加入 return t.setValue(value); } while (t != null); } ```