hashmap源码分析和实现原理(hashmap源码分析 jdk8)
2022-11-07 14:31:42
0
4.2 HashMap。
4.3 HashMap(int initialCapacity, float loadFactor)
构造一个空的 HashMap具有指定的初始容量和负载因子。我们来分析一下。
最后调用了tableSizeFor,来看一下方法实现:
5.增加
现在我们开始分析put方法
我们可以看到put调用的是putVal来进行数据插入,但是要注意到key在这里执行了一下hash方法,来看一下Hash方法是如何实现的。
从上面可以得知HashMap是支持Key为空的,而HashTable是直接用过Key来获取HashCode所以key为空会抛异常其实上面就已经解释了为什么HashMap的长度为什么要是2的幂因为HashMap 使用的方法很巧妙,它通过 hash & (table.length -1)来得到该对象的保存位,前面说过 HashMap 底层数组的长度总是2的n次方,这是HashMap在速度上的优化。当 length 总是2的n次方时,hash & (length-1)运算等价于对 length 取模,也就是 hash%length,但是&比%具有更高的效率。比如 n % 32 = n & (32 -1)。
现在看putVal方法,看看它到底做了什么。
主要参数:
- hash key的hash值
- key 原始Key
- value 要存放的值
- onlyIfAbsent 如果true代表不更改现有的值
- evict 如果为false表示table为创建状态
完整源码分析,放图片的话会太长了,所以就截取了一下分为两部。
文章好看就点这里