源码解读 ```java public static void main(String[] args) {
TreeSet treeSet = new TreeSet(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();
}
}
);
treeSet.add("tom");
treeSet.add("jack");
treeSet.add("hw");
treeSet.add("A");
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); } ```