HashMap底层源码分析


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倍扩容,本文完

  • 19
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值