TreeSet
底层
- 构造器把传入的比较器对象赋给了TreeSet的底层的TreeMap都属性this.comprator
public TreeMap(Comparator<? super K> comparator){
this.comparator=comparator;
}
- 在调用treeSet.add(“Tom”)时,底层会执行
if(cpr!=null){//cpr就是匿名内部类(对象)
do{
parent=t;
cmp=cpr.compare(key,t.key);
//动态绑定到我们的匿名内部类(对象)compare
if(cmp<0)
t=t.left;
if(cmp>0)
t=t.right;
else//如果cmp=0,则认为元素相同,不能添加
return t.setValue(value);
}
}
注意:构造器返回0时,元素不可加入,假设构造器为
return ((String) o1).length()-((String) o2).length();
这时候传入"abc","def"不可同时加入,构造器认为二者是相同元素
TreeMap
底层
put源码
public V put(K key,V value){
Entry<K,V> t=root;
if(t==null){
compare(key,key);//并未接收返回值,只是用来检测键是否为空
root=new Entry<>(key,value,null);
size=1;
modCount++;
return null;
}
int cmp;
Entry<K,V> parent;
Comparator<?super K> cpr=comparator;
/*
同TreeSet (2)中的源码
*/
}