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

      1. TreeMap treeMap = new TreeMap(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. treeMap.put("tom","1");
      12. treeMap.put("jack","2");
      13. treeMap.put("hw","3");
      14. treeMap.put("A","4");
      15. System.out.println("treeSet = " + treeMap);

      }

    // 1.构造器,把传入的实现了 Comparator接口的匿名内部类(对象),传给TreeMap的comparator public TreeMap(Comparator<? super K> comparator) { this.comparator = comparator; }

    // 2. 调用put方法 // 2.1 第一次添加,把k-v 封装到Entry对象,放入root Entry t = root; if (t == null) { compare(key, key); // type (and possibly null) check

    1. root = new Entry<>(key, value, null);
    2. size = 1;
    3. modCount++;
    4. return null;
    5. }

    // 2.2 以后添加 if (cpr != null) { // cpr就是我们的匿名内部类(对象) do { // 遍历所有的key,给当前key找到适当的位置 parent = t; // 动态绑定到我们的匿名内部类(对象)compare cmp = cpr.compare(key, t.key); if (cmp < 0) t = t.left; else if (cmp > 0) t = t.right; else // 如果遍历过程中,发现准备添加Key和当前已有的Key相等,就不添加 return t.setValue(value); } while (t != null); }

    ```