链地址
普通的数组+链表
拉链法
拉链法是链地址法的一种变种,使用链表来存储冲突的键值对。当链表过长时,可以将链表转换为红黑树,从而保证查询性能。
开放定址法
它的核心思想是:当发生冲突时,通过某种策略在哈希表中寻找下一个可用的位置。
线性探测
发生冲突时依次检查下一个位置
二次探测
当发生冲突时,它会按照二次方的步长检查下一个位置,从而减少聚集问题。
双重哈希
h1(key)计算初始位置,如果发生冲突则再使用h2(key)计算步长。
再哈希法
再哈希法本身并不是直接用于解决哈希冲突的方法,而是用于动态调整哈希表大小的技术,通常用于解决哈希表负载过高或负载过低的问题。当哈希表的负载因子(已使用位置 / 总容量)超过某个阈值时,会创建一个新的更大的哈希表,并将所有元素重新哈希到新的表中。比如 HashMap 扩容就是这种方法。