繁体   English   中英

哈希表,哈希函数:值,键,哈希值之间的区别?

[英]Hashtable, Hashfunction: Difference between Value, Key, Hashvalue?

假设我们有要放入哈希表中的数据。 Hashfunction为每个数据对象计算一个Hashvalue,并将此hashvalue放入表中(每个值都应具有自己的存储桶)。 通过哈希值,我们知道数据对象在表中的确切位置。

钥匙在这里起什么作用? Java中的HashMap希望为我们放入HashMap的每个值指定一个特定的键,并使用该键可以获取该值。

我想知道我们要放入哈希表(在Java Hashmap中)的值,哈希值和键之间的区别是什么? 其背后的数学是什么?

您始终需要原始密钥,以应对哈希冲突。 哈希码(或您所称的哈希值)的目的是能够非常快速地找到键的可能匹配项。 哈希码基于密钥-值完全无关。

从逻辑上讲,从哈希表中获取数据是:

  • 计算我们正在寻找的密钥的哈希码
  • 查找具有相同哈希码的所有条目。 (这很快,因为我们只处理数字,并且我们可以安排一个数据结构,使查找具有给定哈希码的条目变得容易。这里有很多选择。)
  • 对于每个具有正确哈希码的条目,将我们正在搜索的键与条目中的键进行比较。
    • 如果现有键和我们要搜索的键相等,则返回该条目的值
  • 无匹配? 返回null表示该结果。

(将哈希表划分为存储桶的确切方法是实现细节。有时每个存储桶仅包含一个条目,但可以链接到其他存储桶;在其他情况下,存储桶可以包含多个条目。请参见有关哈希Wikipedia条目表格以获取更多信息。)

这里的“条目”是{key, value, hash}元组:

  • 哈希完全来自密钥; 该值无关紧要
  • 永远不会有两个相等的键
  • 可能有多个具有相同值的条目。 价值平等是无关紧要的
  • 由于哈希冲突,可能会有多个具有相同哈希的条目; 这很重要,因为在尝试查找特定键的匹配项时有更多条目需要浏览

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM