当前位置: 首页 > 后端技术 > Java

面试官:什么是哈希碰撞?怎么解决?被问题搞糊涂了...

时间:2023-04-01 21:26:00 Java

Hash是如何存储数据的哈希表的本质其实就是一个数组,哈希表中通常存储的是键值对Entry。如下图所示:这里的学号是一个key,哈希表就是根据key值通过哈希函数计算出一个值。该值是下标值,用于确定Entry应该存储在哈希表中的什么位置。哈希碰撞哈希碰撞是指两个不同的值(比如张三和李四的学号)经过哈希计算后,得到的哈希值相同,后面的李四一定要放在原本张三的位置,但是阵法的位置已经被张三占据,导致冲突。哈希冲突的解决方案是开放寻址法和拉链法。开放式寻址方式是指如果当前数组位置1被占用,则放在下一个位置2,如果2也被占用,则继续查找,直到找到空位置。拉链方式采用链表的方式。这时位置1不仅存放了Entry,此时还存放了一个额外的next指针,指向数组外的另一个位置。在这里安排李四,而Zhang第三个Entry中的next指针指向李四的这个位置,也就是这个位置保存的内存地址。如果还有冲突,就把冲突的Entry放到新的位置,然后李四的Entry指向它,这样就形成了一个链表。总结一下:开放寻址方式和拉链方式都试图找到下一个空位置来存储冲突的值。更多Java教程:https://www.javastack.cn/java/来源:blog.csdn.net/zsyoung/article/details/114505480近期文章推荐:1.1,000+Java面试题及答案(2022最新版)2.劲爆!Java协程来了。..3.SpringBoot2.x教程,太全面了!4.不要用爆破爆满画面,试试装饰者模式,这才是优雅的方式!!5.《Java开发手册(嵩山版)》最新发布,赶快下载吧!感觉不错,别忘了点赞+转发!