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

1、概念

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

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

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

2、解决方案

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

(1) 拉链法

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

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

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

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

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

(2) 再哈希法

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

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

直到没有冲突为止

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

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

(3) 再散列法

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

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

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

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

(4) 公共溢出区

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

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

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

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

猜你喜欢

转载自blog.csdn.net/weixin_42559574/article/details/126523961