TreeSet

TreeSet、TreeMap

TreeSet

底层

  1. 构造器把传入的比较器对象赋给了TreeSet的底层的TreeMap都属性this.comprator
public TreeMap(Comparator<? super K> comparator){
	this.comparator=comparator;
}
  1. 在调用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)中的源码
	*/
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值