这才是对HashMap的顶级理解

作者: 鲁班大叔_007分类: 野生技能协会 发布时间: 2023-12-20 21:00:00 浏览:51914 次

这才是对HashMap的顶级理解

Dubai终于有硬币改名了:
视频简介: 我们最熟悉的HashMap 其实水很深,面试不要在答八股文,试试把视频中内容讲给面试官点,生动有趣 bilibiliAI视频总结: HashMap的散列算法和碰撞问题。通过可视化程序展示了希碰撞的原因和解决方法。同时还介绍了调节希碰撞概率的方法和负载因子对内存的影响。通过实际数据测试,比较了低负载和高负载的性能和内存占用情况。最后提出了三个问题供大家思考。视频内容详细、全面,适合对HashMap感兴趣的开发者学习和理解。 使用可视化程序模拟希碰撞过程,并探讨了希碰撞的原因和解决方法。 0:12 希表的容量可以通过公式计算出来,插入数据时会根据不同的数据类型使用不同的散列算法。 0:58 希表的碰撞机制:希表的碰撞机制包括分散、冗余设计和扩容等,可以避免冲突。 4:24 希表的内存占用和负载因子有关,可以通过动画展示出来。 内存浪费的问题,并通过实际数据测试了低负载和高负载的性能和内存情况。 5:13 空白区域与内存浪费:通过左右两图的比较,说明了空白区域的存在会导致内存的浪费。 5:50 面试题:给出了三个面试题,分别是希碰撞、希碰撞的概率和如何调节希碰撞的概率。

鲁班大叔_007:
面试官:HashMap怎么理解 我:它能弹音乐 面试官:弹一个我看看? 我:2:16

【回复】@棋手战鹰 别看,是恶评[doge]
与风飘散:
哈西碰撞:相同的数据或不同的数据经过哈希运算后被放到了同一个哈希桶中,相当于两个人被分到了同一个房间中。 哈西碰撞概率低:是因为负载因子较低(有冗余),例如JAVA中哈希的负载因子为0.75,按数据占总哈希表空间不超过0.75来存储,超过后会扩大哈希表空间以保证负载因子不超过一个比例,存储的数据重新分配,原来发生碰撞的又会被分开。 调节哈希碰撞的方法可以通过 1调整负载因子:负载因子越大越容易发生碰撞 2选择不同的哈希算法:一个好的哈希算法应该不容易发生碰撞的,而坏的哈希算法会使碰撞的概率增加。

Chopin_Wang:
理论上有没有可能设计一种算法,让数据和hash值实现一一对应,没有冲突的?

【回复】可是这样做有什么意义吗...数据本身不就是你要的这样一种哈希,,还是说你想要同态加密之类的
【回复】没有,无重小到无重大的数字占据了所有哈希码
【回复】数据数量无限,哈希结果数量也得是无限。那可能得在数学上突破几个菲尔兹奖了,对于任意一个大整数输入,都能输出一个有限长度的数学表达式来表示它
你是大哈皮吗:
5:09,数据占的内存是一样的,但是两个hashmap对象占的内存可不一样,不然的话负载因子大的表还能查找速度比负载因子小的还快了[doge]

【回复】这个问题比较大,我们的误解比较深,我现在准备搞个大的实验
bebeto001:
哈希碰撞是指当两个不同的输入数据经过哈希函数计算后,产生了相同的哈希值。这种碰撞概率之所以低,是因为哈希函数的设计使得每个输入数据都有独一无二的哈希值。哈希函数的输出值是固定长度的,而输入数据是无限集合,因此哈希碰撞的概率非常小。 调节哈希碰撞的概率取决于具体的哈希函数设计和应用场景。一般来说,可以通过增加哈希函数的复杂度、降低输出集合的大小、使用多个哈希函数等方法来降低碰撞概率。同时,也可以通过增加输入数据的随机性、使用加盐等方法来增加碰撞的难度。

bili阿弹:
O(1)和O(n)的区别吧,极限碰撞之后1就变n了

多线程摆烂鸽:
你这太有水平也太肝了,牛[doge][doge][doge][喜欢][喜欢][喜欢]

晚霞和彩虹:
我听说HashMap从链表转红黑树是为了解决哈希碰撞攻击的 因为真正业务的碰撞记录特别小

鲁班大叔_007:
点赞破千啦,粘伙伴们真给力 https://pan.baidu.com/s/1n2rR10bx6NjBA7A-ksaBVg 提取码: gscw

【回复】说明一下为什么不放github: 代码写的太随意,文档也没有,开源价值较低 所以就不往github凑了

计算机 程序员 数据结构 Java 红黑树 408考研 哈希表 力扣 哈希算法 1024程序员节来了

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!