在中的jdk1.8中,HashMap的默认初始大小是16。同时,HashMap有一个加载因子(Load Factor),其默认值为0.75。加载因子是HashMap中元素数量与容量大小的比值,当这个比值超过某个阈值(默认是容量大小乘以加载因子)时,HashMap就会使用resize进行扩容操作。
每次扩容都是扩展2倍。
扩展后的Node对象要么在原位置,要么要移动原偏移量两倍的位置。
在putValue中,函数中使用了两次resize方法。resize方法表示在进行第一次初始化时会对其进行扩容,或者该数组的实际大小大于临界值(第一次为16*0.75=12),这个时候扩容的同时也会伴随上面元素的重新分发,这也是jdk1.8版本的一个优化地方,但在1.8中,则是根据在同一个桶的位置中进行判断(e.hash & oldCap)是否为0,重新进行hash分配后,该元素的位置要么停留在原始位置上,要么移动到原始位置+增加的数组大小这个位置上。