文章目录
保证2的幂次:tableSizeFor()
扰动函数:hash()
向HashMap中插入数据时,首先要将key的hashCode通过扰动函数得到一个hash属性,然后再用这个hash & (size-1)
将key散列到桶中的某个下标处
之所以要h = key.hashCode()) ^ (h >>> 16)
是因为如果当前桶经过扩容次数较少,在put时hash & (size-1)
,按位与时高位 hash 一直都是和0进行&运算,所以需要右移16位,使高位也参与到运算当中,使散列更加合理,减少哈希冲突次数
put()
resize()
1、获取扩容后长度和阈值的过程
若第一次调用该方法,则为初始化;否则为扩容
下右图中通过resize()对HashMap进行初始化
下面的这部分代码思想就是为newCap和newThr设置值
2、扩容过程
get()
removeNode()
1、对应的两种封装
- 只需要匹配k(matchValue为false)
- k、v都要匹配(matchValue为true)