什么是哈希冲突
概念
- 哈希算法被计算的数据是无限的,而计算后的结果范围有限,因此总会存在不同的数据经过计算后得到的值相同,这就是哈希冲突。 键(key)经过hash函数得到的结果作为地址去存放当前的键值对(key-value)(这个是hashmap的存值方式),但是却发现该地址已经有值,就会产生冲突。
- (自己理解)不同的的key经过hash函数去存放当前键值对时,但经过key转换为hashcode转换出来的物理地址已经存放有值了,所以就会造成冲突~。
- 如果两个不同对象的hashCode相同,这种现象称为hash冲突
解决方法
- 哈希冲突的解决方法:链地址法(拉链法,hashmap的解决方式): 将哈希值相同的元素构成一个链表,head放在散列表中。一般链表长度超过了8就转为红黑树,长度少于6个就变为链表。
- 再哈希法:同时构造多个不同的哈希函数,Hi = RHi(key) i= 1,2,3 … k; 当H1 = RH1(key) 发生冲突时,再用H2 = RH2(key) 进行计算,直到冲突不再产生,这种方法不易产生聚集,但是增加了计算时间。
- 建立公共溢出区:把哈希表分为公共表和溢出表,如果发生了溢出,溢出的数据全部放在溢出区。
收藏的hashcode博文:https://blog.csdn.net/qq_36771269/article/details/79728243