这才是对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凑了