在维基百科的哈希表文章中有一张很好的图片:
到目前为止,一切都很清楚,除了中间的哈希函数。
- 一个函数如何从任何字符串生成正确的索引?这些索引实际上也是整数吗?如果是,那么这个函数如何能够为
John Smith
输出1
,为Lisa Smith
输出2
等等?
在你的例子中,这只是大大简化了一下。没有真正的哈希函数会将这些键映射到连续的数字。
也许你想读一下我关于哈希表的以前的回答
$hash = $string[0] % HASH_TABLE_SIZE;
此函数将返回一个数字,介于0和HASH_TABLE_SIZE - 1之间,具体取决于字符串的第一个字母。该数字可用于转到哈希表中的正确位置。
真正的哈希函数将考虑字符串中的所有字母,并且它将被设计为在桶之间有均匀分布。
在 MSDN 上有一篇关于哈希函数(以及冲突检测/解决)的非常好的文章:
您可以跳到标题使用哈希函数压缩序数索引
有一些是 .NET 特定的内容(当他们谈论 .NET 默认使用哪个哈希算法时),但大部分是与语言无关的。