hashMap 源码详解

文章深入解读HashMap的底层实现,探讨了哈希碰撞或哈希冲突的定义及其原因。哈希函数的设计对于冲突减少至关重要,常见的哈希函数如除留余数法和直接定址法被提及。避免冲突的方法包括优化哈希函数和调节负载因子,例如通过增大散列表长度来降低冲突率。
摘要由CSDN通过智能技术生成

1、 HashMap 底层源码解读(源码分析+知识问答)

在这里插入图片描述

2、 什么是哈希碰撞?或者什么是哈希冲突?为什么会发生哈希冲突?

不同的关键字通过相同的哈希函数算出了一个相同的 哈希地址,这就叫做哈希冲突。
哈希冲突主要因为 哈希表底层的数组容量是小于实际存储的关键字的数量,所以发生冲突是必然的,我们只能够尽量避免,不能完全消除。

3、 如何设计哈希函数?你了解哈希函数怎么设计吗?

引起哈希冲突的一个方面就是哈希函数设计的不够合理。哈希函数设计的越精妙,产生哈希冲突的可能性就越低,但是无法避免哈希冲突
设计哈希函数我们的原则是
1).降低碰撞和溢出的产生
2).哈希函数设计简单
3).函数计算的地址尽量均与分布在整个空间提高空间利用率。

4、 常见的哈希函数

常见的哈希函数,可以说出来两三个,随便解释一下

除留余数法
设置散列表中允许的地址数为m,取一个不大于m,但是接近于m或者等于m 的质数p作为除数,按照哈希函数:
Hash(key) = key%p ,将关键字转换成哈希地址

直接定址法
计算关键字的某个线性函数得到哈希地址
Hash(key) = A*key+B
优点: 设计简单、均匀分布
缺点:需要事先知道关键字的分布情况
适用的场景:查找比较小且连续的情况

5、 如何避免哈希冲突?

设计更合理的哈希函数
哈希函数设计的越精妙,产生冲突的概率就越低。

调节负载因子
什么是负载因子,负载因子就是 填入表中的元素数量/散列表的长度

在这里插入图片描述

负载因子和冲突率的关系是成正比的,因为填入表中的元素不能够改变,所以我们只能调节数组的长度。
所以降低冲突率,就是降低负载因子的大小,因此我们只能够把增大散列表的长度(到达阈值扩容)来降低冲突率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吹老师个人app编程教学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值