• 哈希冲突概念及其四种解决方案


    1、概念

    要了解哈希冲突,先了解哈希算法

    所谓哈希算法就是一定的输入通过哈希运算输出哈希值的计算方法

    当两个不同的输入,输出值相同,我们就称之为哈希冲突

    2、解决方案

    一般来说,解决哈希冲突有四种方案

    (1) 拉链法

    非常地通俗易懂,当产生哈希冲突时,将元素链接到链表上,查询时遍历链表

    我们在 Java 集合中熟知的 HashMap 就是采用此种方式

    所以它的优缺点点和 HashMap 类似

    优点:删除简单,去掉链表上元素即可

    缺点:链表过长时候影响遍历效率,从而影响查询效率,在 Java 1.8中对此有针对性优化,当链表长度超过阈值 8 时,链表会转换成红黑树,从而提高查询效率

    (2) 再哈希法

    俗话说,一次不行,那就再来一次

    再哈希法的含义就是,当一次哈希运算产生哈希冲突时,再进行一次哈希运算重新计算哈希值,

    直到没有冲突为止

    优点:简单粗暴,哈希值不易产生聚集

    缺点:计算次数过多,会影响读写的效率

    (3) 再散列法

    它的思想核心就是此处不留爷,自有留爷处

    当产生冲突时,就寻找另一个地址,直到不冲突为止,将元素放入其中,若整个空间都没有空余的地址,则产生溢出

    优点:只要哈希表还有位置,就能找到合适的地方

    缺点:寻址的次数不可控,次数过多会影响读写性能,同时删除也比较麻烦

    (4) 公共溢出区

    就是在哈希表之外创建一个公共溢出区,专门用来存放产生哈希冲突的元素

    查找时,先从哈希表查,查不到就从公共溢出区去查

    优点:独立的空间,不需要其他的操作

    缺点:当冲突过多时,公共溢出区过大,影响查询效率

  • 相关阅读:
    Unity中Shader的屏幕抓取 GrabPass
    Debezium系列之:支持 mysql8 的 set role 语句
    HDU 6276 Easy h-index
    0823学习笔记(Linux文件)
    CSRF漏洞
    关于求直线交点的问题。
    Java设计模式之建造者模式
    狂奔的低代码,画风各异的阿里云、腾讯云
    百度抓取香港服务器抓取超时是什么情况?
    认识 Cookie 和 Session
  • 原文地址:https://blog.csdn.net/weixin_42559574/article/details/126523961