源码解读 ```java public static void main(String[] args) {
TreeMap treeMap = new TreeMap(new Comparator() {
@Override
public int compare(Object o1, Object o2) {
// 调用String的compareTo进行字符串大小比较
// return ((String) o1).compareTo((String) o2);
// 按照长度大小进行排序
return ((String)o2).length() - ((String)o1).length();
}
}
);
treeMap.put("tom","1");
treeMap.put("jack","2");
treeMap.put("hw","3");
treeMap.put("A","4");
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
root = new Entry<>(key, value, null);
size = 1;
modCount++;
return null;
}
// 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); }
```