哈希冲突¶
哈希冲突指的是:两个或多个不同的键,经过哈希计算后得到了同一个位置。
常见处理方式:
-
链地址法
冲突位置不只放一个元素,而是把落到同一位置的元素串成链表或桶。 -
公共溢出区
冲突的元素不继续占原位置,而是统一放到额外的溢出区域中。 -
再哈希法
准备多个哈希函数。第一次冲突后,换一个哈希函数重新计算地址。 -
开放定址法
发生冲突后,不额外开链表,而是按某种探测规则继续找下一个可用位置。
本质是“冲突后继续在表内找空位”。
QHash 本质上是哈希表,核心特点是通过 key 的哈希值快速定位数据。
它不保证有序,也不应该依赖遍历顺序。
QHash 不是“给不同的键产生不同的哈希函数”,而是对键类型使用对应的 qHash() 计算哈希值。
同一个键类型通常对应同一种哈希规则,不是每个键单独换一个哈希函数。
QHash 默认启用带随机种子的哈希,也就是 salted hash。
这个随机种子通常在进程启动后生成一次,用来让同样输入在不同进程里的哈希结果不固定,从而降低针对哈希冲突的攻击效果。