发生冲突时在散列 table 中查找信息的困惑

Confusion about finding information in a hash table when there is a collision

我知道如果哈希中存在冲突table,您有几种存储数据的选择。您可以使用一些素数线性遍历数组,直到找到一个空闲点。您还可以将整个 table 重新散列为一个更大的数组。我敢肯定还有其他方法。我不明白的是,如果一开始就发生碰撞,您怎么知道您要查找的是哪一行数据?我会不允许使用重复的密钥吗?

散列和密钥之间存在很大差异(尽管有时它们可​​能相同)。

键可以是一个非常大的数字,一个由许多字段组成的复杂对象或任何东西。
您将哈希函数应用于此密钥以获得哈希。

所以即使您不允许重复键,您仍然可以有重复的哈希值。

你通常不能直接使用你的键作为散列,因为数组索引是从 0 开始的连续整数,所以如果你的键太大、负数或不是整数,它就不起作用,你会必须应用某种哈希函数。


如果你想存储 1 到 10000 之间的数字,你可以让键为数字本身,并可以使哈希为数字除以 1000 的余数(这样你就有了一个大小为 1000 的数组对于散列 table).

插入 1001 会将其放在索引 1。如果您尝试插入 2001,它也会尝试转到索引 1,并且您会发生冲突。

* 键可以是您要存储的整个值,也可以只是它的标识符。