开放地址法
基本思想:当发生哈希冲突时,即两条记录对应的地址相同(假设都为 p),基于该地址 p 生成另一个地址 p1 作为后一条记录的存储地址。如果在 p1 上也发生了冲突,则基于 p1 生成下一个地址,直到找到一个不冲突的地址
再哈希法
基本思想:有多个不同的哈希函数用于计算记录的哈希值。当发生哈希冲突时,逐个使用其它哈希函数计算哈希值,获得存储地址,直到不冲突。
这种方法不易产生数据聚集,计算时间较长,删除数据不方便。
链地址法
基本思想:将产生哈希冲突的记录存到一个链表中,哈希表中存的是该链表的头
这种方法适用于经常进行插入和删除的情况。
Java 中的 HashMap 就用了该方法。当冲突数据太多时,HashMap 会用树结构替代单链表,来存储数据,以提供存取效率。
建立公共溢出区
基本思想:将哈希表分为 基本表 和 溢出表 两部分。凡是和 基本表 发生冲突的记录都被存到 溢出表。