Hash如何存数据
hash表的实质其实就是数组,hash表中通常寄存的是键值对Entry。
如下图:
这里的学号是个key,哈希表就是依据key值来通过哈希函数计算失去一个值,这个值就是下标值,用来确定这个Entry要寄存在哈希表中哪个地位。
Hash碰撞
hash碰撞指的是,两个不同的值(比方张三、李四的学号)通过hash计算后,失去的hash值雷同,起初的李四要放到原来的张三的地位,然而数组的地位曾经被张三占了,导致抵触。
解决办法
hash碰撞的解决形式是凋谢寻址法和拉链法。
凋谢寻址法指的是,以后数组地位1被占用了,就放到下一个地位2下来,如果2也被占用了,就持续往下找,直到找到空地位。
拉链法采纳的是链表的形式,这个时候地位1就不单单寄存的是Entry了,此时的Entry还要额定保留一个next指针,指向数组外的另一个地位,将李四安顿在这里,张三那个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.Spring Boot 2.x 教程,太全了!
4.别再写满屏的爆爆爆炸类了,试试装璜器模式,这才是优雅的形式!!
5.《Java开发手册(嵩山版)》最新公布,速速下载!
感觉不错,别忘了顺手点赞+转发哦!