Hashtable,Hashfunction:Value,Key,Hashvalue之间的区别?

时间:2014-02-06 13:51:58

标签: java math hash hash-function

让我们想象一下,我们想要将数据放入Hashtable中。 Hash函数计算每个数据对象的Hashvalue,并将此哈希值放入表中(每个值都应该有自己的桶)。使用hashvalue,我们知道数据对象在表中的确切位置。

关键在这里发挥什么作用? Java中的HashMap需要为我们放入HashMap的每个值都有一个特定的键,并且使用键我们可以得到值。

我想知道我们想要放入Hashtable(在Java Hashmap中)的值,hashvalue和key之间的区别是什么?那背后的数学是什么?

1 个答案:

答案 0 :(得分:3)

您始终需要原始密钥,以应对哈希冲突。哈希码(或您调用它时的哈希值)的要点是能够非常快速地找到键的可能的匹配。根据密钥,哈希码 - 值完全无关。

从逻辑上讲,哈希表的提取是:

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

(将哈希表划分为桶的确切方式是实现细节。有时每个桶只包含一个条目,但可以链接到其他桶;在其他情况下,桶可以包含多个条目。请参阅{ {3}}了解更多信息。)

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

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