【发布时间】:2015-09-15 23:18:10
【问题描述】:
我了解,如果哈希表中存在冲突,您可以通过多种方式存储数据。您可以使用一些素数线性遍历数组,直到找到一个空闲点。您还可以将整个表重新散列成一个更大的数组。我敢肯定还有其他方法。我不明白的是,如果首先发生冲突,您如何知道哪一行数据是您要查找的数据?我会不允许使用重复的键吗?
【问题讨论】:
标签: hashtable collision concept
我了解,如果哈希表中存在冲突,您可以通过多种方式存储数据。您可以使用一些素数线性遍历数组,直到找到一个空闲点。您还可以将整个表重新散列成一个更大的数组。我敢肯定还有其他方法。我不明白的是,如果首先发生冲突,您如何知道哪一行数据是您要查找的数据?我会不允许使用重复的键吗?
【问题讨论】:
标签: hashtable collision concept
哈希和键之间有很大的不同(尽管它们有时可能相同)。
键可能是一个非常大的数字,一个由许多字段组成的复杂对象或任何东西。
您将散列函数应用于此键以获取散列。
因此,即使您禁止重复键,您仍然可能有重复的哈希。
您通常不能直接将您的密钥用作哈希,因为数组索引是从 0 开始的连续整数,因此如果您的密钥太大、负数或不是整数,它将不起作用,您必须应用某种哈希函数。
如果您想存储 1 到 10000 之间的数字,您可以让键为数字本身,并且可以将哈希值设为数字除以 1000 的余数(因此您将有一个大小为 1000 的数组用于哈希表)。
插入 1001 会将其放在索引 1。如果您尝试插入 2001,它也会尝试转到索引 1,并且会发生冲突。
* 键可以是您要存储的整个值,也可以只是它的标识符。
【讨论】: