开发者学堂课程【Java面试疑难点串讲1:面试技巧及语言基础:Map-Resize 】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/24/detail/489
Map-Resize
内容介绍
一、 Map-Resize
一、 Map-Resize
HishMap 需要 resize 时扩容因子是如何得到的?
如果要想解决这个问题还是需要去进行源代码的深入研究,也就是说对于基本的数据结构(类集)。
在进行数据添加的时候这个里面存在有一个 put() 方法。
public V put(K key,V value) {
return putVal(hash(key),key,value,false,true);
}
put() 方法里面可以发现有一个 putVal() 方法,而且可以发现这个方法首先进行了hash 计算(查找),而后在这个方法的实现定义。
if(oldCap>0) {
if(oldCap>=MAXIMUM_CAPACITY) { //
是否大于了最大的容量
threshold=Integer.MAX_VALUE; //
将其设置为整型最大
return oldTab;
} //
如果没有超过容量
else if((newCap=oldCap<<1)
oldCap>=DEFAULT_INITIAL_CAPACITY)
newThr=oldThr<<1; // double threshold
}
else if(oldThr>0) // initial capacity was placed in threshold
newCap=oldThr;
else { // zero initial threshold signifies using defaults
newCap=DEFAULT_INITIAL_CAPACITY;
newThr=(int)(DEFAULT_LOAD_FACTOR*DEFAULT_INITIAL_CAPACITY);
}
它的容量扩充指的是一开始放30个,如果发现不够了,则进行移位处理,30*2,那么再一次扩充30*2*2。