https://blog.csdn.net/qq_36771269/article/details/79728243
1.什么叫hash冲突?
hash表的存储是key值和value值一起存储,如果一个key值对应的value值多个的话,就会引起hash冲突。
2.如何解决
(1)开发地址法
又称再散列法,如果key值对应的散列值p有冲突,在p的基础上散列一个p1,如果还有冲突,散列一个p2,以此类推,通用的散列公式Hi=(H(key)+di)% m i=1,2,…,n ,其中H(key)为哈希函数,m 为表长,di称为增量序列。
根据di的不同,可以分为三类:
线程探测再散列,1,2,3,,,
二次平方探测再散列,1,-1,4,-4,9,-9,,,
伪随机探测再散列
(2)再hash法
有多个hash函数
(3)链地址法
hashmap就是这样结局的
(4)建立公共的溢出区
3.开放散列和封闭散列
开放散列(拉链法)
优点:对于记录总数频繁变化的情况,处理的比较好;删除记录时,比较方便,直接通过指针操作。
缺点:查询不方便;key-value可以提前预知,人为设定一个不会产生冲突的哈希函数,此时性能低于封闭散列表。序列化操作不易;
封闭散列(开发地址法)
优点:更容易进行序列化操作;如果记录总数可以提前预知,可以创建完美的哈希函数;
缺点:存储数目的长度不能超过桶数组的长度,若超过需要扩容,成本飙升;探测序列,成本高;删除记录麻烦;
4.求解哈希表平均查找长度
https://blog.csdn.net/scmuzi18/article/details/77140889