哈希键和值

Hash key and value

本文关键字:键和值 哈希      更新时间:2023-10-16

我很好奇为什么哈希同时需要哈希键和哈希值

  1. 如果哈希键是int类型,则哈希键将被更改为哈希码,这是哈希的索引。但是,哈希值与哈希键相同,不是吗?因此,当我使用int作为哈希键时,哈希值不需要作为参数(与哈希键重复)。

  2. 如果我将哈希键作为字符串,哈希键也将更改为哈希码。然后,哈希值是我想要与字符串匹配的数字?还是字符串的指针?

我不明白为什么需要散列值

让我们先弄清楚一些术语,因为你似乎对它们感到困惑1

在哈希中,实际上只有两件事,项(来自脚注,可能是你的哈希值/键)和哈希码。您将输入项传递给哈希函数并返回一个哈希码。这是一般情况,但请确保你已经阅读了脚注——区分完整条目和关键部分可能是有正当理由的。

至于为什么你需要哈希值和代码,比如说,你要记录地球上所有超级聪明、英俊的人(以及他们的狗的名字),因此你需要添加字符串paxdiablo:lilly

所以你把这个字符串扔到你的哈希函数中,最终得到一个42的哈希码(从paxdiablo计算),这就是它所在的桶。

然而,由于哈希函数几乎总是一个多对一的操作(许多其他字符串也将哈希到42),没有办法告诉它实际上是paxdiablo在你的数据结构仅基于哈希码。

事实上,我的死敌paxangelo,它有一只猫,在所有的东西中,fluffybunnykins,是你不希望遇到的最愚蠢、最丑陋的生命形式之一,它也生成了一个42的哈希码。所以,当要找出谁在42桶里的时候,你要如何区分这两个,除非原始字符串在里面?

哈希码决定项目使用哪个桶,但您仍然需要实际项目放入桶中。


1我尝试了大约十分钟,但我仍然对我想到的内容不完全满意。据我所知,你用的是:

  • 哈希值作为要存储的整个项。
  • 哈希键是用于哈希的哈希值的那一部分。
  • 哈希值作为哈希函数的结果。

我倾向于不区分前两者,因为在我看来没有什么可获得的。我通常将整个项目传递给哈希函数,但您可以设计一个只需要关键部分的解决方案,特别是如果您想在不同的记录布局上使用哈希函数(键在不同的位置)。