文章目录
- HashMap底层源码分析
- 1.观察HashMap成员变量
- 1.1 HashMap的主要成员变量
- 1.2 HashMap的构造方法
- 1.3 put方法
HashMap底层源码分析
前言 : 上文我们已经将哈希表学完了,下面就来简单的看一下源码,就结束我们的Map和Set 的学习
1.观察HashMap成员变量
这里我们ctrl + 鼠标左键进入到 HashMap的 源码
1.1 HashMap的主要成员变量
1.2 HashMap的构造方法
下面就来看 put 方法
1.3 put方法
图一 :
图二 : putVal 方法
这关于内存分配,还有一个面试题 下面来看看
此时这个面试问题就解决了, 下面再来看一个(这个问题已经再 上文讲过了)
面试题 : 讲一下你对hashcod 和 equels的区别
引用 上文的 图 :
此时就能够明显的知道 hashcod 将引用类型的数据计算成一个int 值,然后通过 hash函数计算出某个下标的, 这里如果出现计算出同一位置,即出现了哈希碰撞,那么我们就需要通过 equals 来确定当前的值是否相同, 如果相同更新val值, 不同直接插入到 链表的最后 (JDK 1.8 后使用的尾插法)、
面试题 : 当HashMap满的时候我们需要注意什么 ?
这里主要考查的不就是我们重新hash
吗
这里需要重新调整HashMap的大小,就是将数组进行的特殊的扩容【将原先数组里的每一个下标底下的链表中每个节点重新哈希到新扩容后的链表中】,来确保 重新调用的HashMap,我们可以根据新的存储位置,找到我们原先的数据。
补充 : 在 putVal 的树化操作
这里 只是简单的看看 ,感兴趣可以自己去找找博客 。
最后补充一下我们hashMap的扩容是2倍扩容,本文完