一个菜鸟的源码之路

和之前分析的一样,我们来从初始化,加值,扩容这三个步骤来说。
1.new初始化


在这里初始化了一个值,叫负载因子,具体的作用后面再说。
2.put加值
put函数就会直接调用putVal()

再来看下
hash()
的实现,发现这个函数就是用来求传入值的hashcode值的异或运算结果。具体作用主要是,来将一个一个对象进行区域划分,减少查找难度
然后,来分析下
putVal()
函数。这部分比较长,我们一步一步来分析。
首先会到
resize()
函数,我们来看下resize()
函数。发现会返回一个16长度的Node数组
再来看putVal()
函数。然后就会将保存了key,value的Node节点赋给tab[i]。

3.扩容
之前说到,最初是初始化一个长度为16的数组,当长度超过时,会咋样呢。这时,我们就要回过头来看resize()
函数

此时,我们知道了负载因子的作用。每当存储的键值对的长度大于负载因子和默认大小的乘积时,会自动扩容为原来的一倍
网友评论