hashmap源码分析和实现原理(hashmap源码分析 jdk8)

2022-11-07 14:31:42 0

hashmap源码分析和实现原理(hashmap源码分析 jdk8)

原标题:HashMap源码分析和默认负载因子(0.75)。

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为创建状态

完整源码分析,放图片的话会太长了,所以就截取了一下分为两部。

下面还有resize get等方法

文章好看就点这里

关键字:  hashmap源码分析和实现原理  hashmap源码分析 jdk8  hashmap源码深度解析  hashmap源码有多少行  hashmap源码面试题