据我所知,如果哈希表中存在冲突,您可以选择存储数据。您可以使用一些素数来线性遍历数组,直到找到一个空闲点。您还可以将整个表格重新组合成一个更大的数组。我确定还有其他方法。我不明白的是,如果首先发生碰撞,您如何知道哪一行数据是您要查找的数据?我是否只是不允许使用重复的密钥?
答案 0 :(得分:1)
哈希和密钥之间存在很大差异(尽管它们有时可能相同)。
密钥可能是一个非常大的数字,一个由许多字段组成的复杂对象或任何真实的东西 您将散列函数应用于此密钥以获取散列。
因此即使你不允许重复键,你仍然可以有重复的哈希值。
你经常不能直接使用你的密钥作为哈希,因为数组索引是从0开始的连续整数,所以如果你的密钥太大,负数或不是整数,它就不会工作。 #39;我必须应用某种哈希函数。
如果你想存储1到10000之间的数字,你可以让密钥成为数字本身,并且可以使哈希数字的剩余部分除以1000(并且你因此得到一个大小为1000的数组对于哈希表)。
插入1001会将其放在索引1处。如果您尝试插入2001,它也会尝试转到索引1并且您将发生碰撞。
*密钥可以是您要存储的整个值,也可以只是它的标识符。