自动扩容需要满足2个条件
- size: HashMap中key-value键值对的个数
- threshold: 阈值 —-这个当我在首次put的时候给这个属性计算出一个值
- 这个值的由来:threshold会根据initialCapacity(数组初始化容量)算出initialCapacity小于等于2的幂次方的值,再用这个值去loadFactor(加载因子)例如当initialCapacity为18时,算出来的值为32, 再加载因子
另一个条件:null !=table[bucketIndex]
在java中数组本身是无法扩容的,因为数组在创建时已经分配好了内存空间,那它怎么实现的的呢:
产生的原因我个人觉得可能是头插法引起的原因之一