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 开发手册(嵩山版)》最新公布,速速下载!
感觉不错,别忘了顺手点赞 + 转发哦!