源码分析
/**
* 参数kc:新增节点key的类型
* 参数k:新增节点的key
* 参数x:当前节点的key
*/
@SuppressWarnings({"rawtypes","unchecked"})
static int compareComparables(Class<?> kc, Object k, Object x) {
//当前节点x的key为null
//或当前节点key的类型不同于新增节点key的类型
//返回0,否则返回k.compareTo(x)比较的结果
return (x == null || x.getClass() != kc ? 0 :
((Comparable)k).compareTo(x));
}
注意:compareTo方法是Comparable接口中的方法,八大基本类型对应的包装类和字符串类都实现了这个接口和compareTo方法。
所以这里分两种情况,(1)新增节点的key是八大基本类型对应的包装类或字符串类,调用其中的compareTo方法进行判断;(2)如果新增节点是自定义类,就由你自己写的判断方式来判断。
compareTo方法的具体使用可以参考这个回答:Java中Comparable接口与Comparator接口的区别