跳转至

哈希冲突

哈希冲突指的是:两个或多个不同的键,经过哈希计算后得到了同一个位置。

常见处理方式:

  1. 链地址法
    冲突位置不只放一个元素,而是把落到同一位置的元素串成链表或桶。

  2. 公共溢出区
    冲突的元素不继续占原位置,而是统一放到额外的溢出区域中。

  3. 再哈希法
    准备多个哈希函数。第一次冲突后,换一个哈希函数重新计算地址。

  4. 开放定址法
    发生冲突后,不额外开链表,而是按某种探测规则继续找下一个可用位置。
    本质是“冲突后继续在表内找空位”。

QHash 本质上是哈希表,核心特点是通过 key 的哈希值快速定位数据。
它不保证有序,也不应该依赖遍历顺序。

QHash 不是“给不同的键产生不同的哈希函数”,而是对键类型使用对应的 qHash() 计算哈希值。
同一个键类型通常对应同一种哈希规则,不是每个键单独换一个哈希函数。

QHash 默认启用带随机种子的哈希,也就是 salted hash。
这个随机种子通常在进程启动后生成一次,用来让同样输入在不同进程里的哈希结果不固定,从而降低针对哈希冲突的攻击效果。