首先说一下hash冲突吧,hash冲突在hash表中一般情况下是会遇到的;
hash冲突指的是你在向hash表中存数据时,首先要通过key值进行指定的hash算法进行计算,然后得到一个值,这个值就是你要将这个key对应的value存入的地址。但是在这个地址中已经有值存在,所以这个时候就发生了hash冲突,不同的key通过hash算法得到了对应的同一个值。

hash冲突解决的方法:

  1. 再hash法:这种方法就是有多个hash算法,当使用一个hash算法计算得到值发生hash冲突时那就使用另外一个hash算法,直到没有hash冲突。这种方法增加了计算的时间。

  2. 开放地址法
    这种方法也称再散列法,其基本思想是:当关键字key的哈希地址p=H(key)出现冲突时,以p为基础,产生另一个哈希地址p1,如果p1仍然冲突,再以p为基础,产生另一个哈希地址p2,…,直到找出一个不冲突的哈希地址pi ,将相应元素存入其中。这种方法有一个通用的再散列函数形式:
    Hi=(H(key)+di)% m i=1,2,…,n
    其中H(key)为哈希函数,m 为表长,di称为增量序列。增量序列的取值方式不同,相应的再散列方式也不同。主要有以下三种:
    线性探测再散列
    dii=1,2,3,…,m-1
    这种方法的特点是:冲突发生时,顺序查看表中下一单元,直到找出一个空单元或查遍全表。

二次探测再散列
di=12,-12,22,-22,…,k2,-k2 ( k<=m/2 )
这种方法的特点是:冲突发生时,在表的左右进行跳跃式探测,比较灵活。

伪随机探测再散列
di=伪随机数序列。
具体实现时,应建立一个伪随机数发生器,(如i=(i+p) % m),并给定一个随机数做起点。

例如,
已知哈希表长度m=11,哈希函数为:H(key)= key % 11,则H(47)=3,H(26)=4,H(60)=5,假设下一个关键字为69,则H(69)=3,与47冲突。
如果用线性探测再散列处理冲突,下一个哈希地址为H1=(3 + 1)% 11 = 4,仍然冲突,再找下一个哈希地址为H2=(3 + 2)% 11 = 5,还是冲突,继续找下一个哈希地址为H3=(3 + 3)% 11 = 6,此时不再冲突,将69填入5号单元。
如果用二次探测再散列处理冲突,下一个哈希地址为H1=(3 + 12)% 11 = 4,仍然冲突,再找下一个哈希地址为H2=(3 - 12)% 11 = 2,此时不再冲突,将69填入2号单元。
如果用伪随机探测再散列处理冲突,且伪随机数序列为:2,5,9,………,则下一个哈希地址为H1=(3 + 2)% 11 = 5,仍然冲突,再找下一个哈希地址为H2=(3 + 5)% 11 = 8,此时不再冲突,将69填入8号单元。

  1. 链地址法
    就是当发生hash冲突的时候,就使用一个链表来存放这些值。也就是将hash算法得到的值相同的key对应的value放在一个链表中。
    Java中的hashmap中就是使用了这个方法。

hash冲突以及hash冲突的解决方法相关推荐

  1. 创业冲突的五种解决方法是_当创始合伙人发生冲突时,最好的解决方法4和5

    原标题:当创始合伙人发生冲突时,最好的解决方法4和5 各位小麦粉的朋友,今天小编将会给各位分享当创始合伙人发生冲突时,最好的解决方法4和5,希望能给您带来帮助. 方法4:拥抱冲突,公平斗争 我们作为创 ...

  2. Visio 2016 MSI 与 Office 2016 Click-to-Run 冲突导致无法安装的解决方法

    Visio 2016 MSI 与 Office 2016 Click-to-Run 冲突导致无法安装的解决方法 问题描述 已安装:Office 2016 家庭与学生版 64 bit(Click-to- ...

  3. maven jar包冲突常见报错及解决方法

    见到如下错误,可以想到是不是jar包冲突 1.java.lang.NoSuchMethodError 2.java.lang.ClassNotFoundException 3.java.lang.No ...

  4. 冲突5种常用的解决方法

    文章目录 前言 一.强迫命令 二.合作解决 三.妥协调解 四.缓和包容 五.撤退回避 总结 前言 在生活中,舌头和牙齿都难免打架,更何况在项目团队中,团队成员长时间工作在一起,难免会发生矛盾和冲突,当 ...

  5. svn提示没有设置冲突_svn代码冲突,不能提交的解决方法

    对于刚接触svn的人来说,svn冲突后,不能提交是件让人很郁闷的事情.最让人郁闷的事,是代码间的覆盖.你把我代码盖了,我会很火大的.谁把谁的盖了都不爽. 为什么会出现代码冲突问题呢,因为不同的人,同时 ...

  6. 网易企业邮箱 跟Thunderbird 雷鸟 e mail 客户端发邮件有冲突,发双份 解决方法很简单(图)

    问题:用Thunderbird 客户端和网易企业邮箱,发一份邮件时发件箱里显示发了两封,有点头疼哦,客服也没有给出明确答复:而且在修改各种配置是干脆无法发送邮件了,后来下载了最新版Thunderbir ...

  7. 项目管理中冲突的六种解决方法

    解决项目冲突的主要责任在于项目经理,项目经理可以使用以下六种方法来解决冲突: 面对/解决问题(confronting/problem solving):通过审查备选方案,把冲突当作需要解决的问题来处理 ...

  8. (LInux)network网卡重启失败原因及解决方法

    前言 在我们进行网络配置的时候,经常会遇到配置成功后却无法重启网卡的问题,下面就介绍的是network重启失败的原因及解决方法. 报错 Job for network.service failed b ...

  9. 用链表和数组实现HASH表,几种碰撞冲突解决方法

    Hash算法中要解决一个碰撞冲突的办法,后文中描述了几种解决方法.下面代码中用的是链式地址法,就是用链表和数组实现HASH表. he/*hash table max size*/ #define HA ...

  10. HashMap 中 hash 冲突的解决方法及原理分析

    我们最先衰老的不是容貌,而是不顾一切的闯劲.有时候,要敢于背上超出自己预料的包袱,真的努力后,你会发现自己要比想象的优秀很多. HashMap冲突的解决方法比较考验一个开发者解决问题的能力. 在Jav ...

最新文章

  1. Facebook再曝数据丑闻删除应用数据仍会被泄漏
  2. 在线作图|如何绘制带分组的散点图
  3. 记录一下matlab-vs联合编程
  4. MyBatis -- Spring -- SqlSessionFactoryBean
  5. .net 应用迁移到Mono 工具 (Moma)
  6. 【LoadRunner】安装LoadRunner时提示缺少vc2005_sp1_with_atl_fix_redist解决方案
  7. 安富莱v6开发板网口通讯_安富莱嵌入式周报第170期:2020.07.202020.07.26
  8. LeetCode 1065. 字符串的索引对
  9. 资源分享|平面设计师可参考的素材网站
  10. python中color语句_python中的colorlog库详解
  11. java的多态代码例子_java 多态实例代码
  12. 如何用php开启企业微信开发的回调模式
  13. TI的Controlsuit里的硬件资源打开方式(Eagle转AD)
  14. 打砖块游戏源文件_大家无聊的话不如来玩玩这些小游戏
  15. 2022苹果ios个人开发中注册遇到的问题
  16. Alphapose_pytorch版本环境配置Win10
  17. 前端调用微信扫一扫不触发事件,没有任何反应
  18. java 23种设计模式详解
  19. 手环、APP监测睡眠可靠吗?
  20. 浅试uniapp 集成融云 实现视频通话

热门文章

  1. 基于python的数据管理系统的设计_基于Python的自然语言数据处理系统的设计与实现...
  2. 如何修复Sketchup经常遇到的错误报告问题
  3. sketch up rbs/rbz/rb插件安装方法
  4. 信息安全管理体系--建立
  5. JavaSE实现汽车租赁系统
  6. 一名待业小生亲身调研揭秘10家大数据培训机构“内幕”
  7. Hydra(弱密码爆破)使用教程
  8. 基于OP放大器的有源模拟滤波器设计--一阶有源滤波器
  9. ios模拟器 安装ipa_用iOS模拟器安装App的方法
  10. 微信小程序 地图 组件