我需要 key/value "pairs" 才能使用哈希表吗?
Do I need to have key/value "pairs" to make use of hash tables?
一个关于散列 table 的基本问题。考虑一个用散列 table 替换整数数组的简单情况。这里的 key/value 对是什么?如果我没记错的话,一对在这里没有意义。
例如,我想将整数映射到大小为 10 的数组(从 0 到 9 的桶)。
考虑一个哈希函数,它只需要 mod 10 输入。
例如,元素 23 将以 23 % 10 = 3 的形式进入 3 的桶。
按照我的理解,23是key,3是对应的hash值。 23 不是 'value' 吗?
没有。 23
是关键。密钥的哈希值(在您的情况下为 3
)决定了存储桶。该值是您放入桶中的值,与键 23
相关联。例如,在许多语言中,您会写:
my_hashtable[23] = "Valerie"
这将创建一个键值对 (23, "Valerie")
并将其填充到 my_hashtable
.
的某个桶中
哈希表的目的是关联键和值,并允许以有效的方式进行查找。桶和哈希是一个实现细节(最优的,所以每个人都在使用它们,但仍然是一个实现细节,因此与哈希表的用户无关)。
正如我在评论中指出的那样,如果您需要集合,大多数语言也支持它们。许多人会在后台使用哈希表来执行此操作,但这也是一个实现细节。
一个关于散列 table 的基本问题。考虑一个用散列 table 替换整数数组的简单情况。这里的 key/value 对是什么?如果我没记错的话,一对在这里没有意义。
例如,我想将整数映射到大小为 10 的数组(从 0 到 9 的桶)。 考虑一个哈希函数,它只需要 mod 10 输入。 例如,元素 23 将以 23 % 10 = 3 的形式进入 3 的桶。
按照我的理解,23是key,3是对应的hash值。 23 不是 'value' 吗?
没有。 23
是关键。密钥的哈希值(在您的情况下为 3
)决定了存储桶。该值是您放入桶中的值,与键 23
相关联。例如,在许多语言中,您会写:
my_hashtable[23] = "Valerie"
这将创建一个键值对 (23, "Valerie")
并将其填充到 my_hashtable
.
哈希表的目的是关联键和值,并允许以有效的方式进行查找。桶和哈希是一个实现细节(最优的,所以每个人都在使用它们,但仍然是一个实现细节,因此与哈希表的用户无关)。
正如我在评论中指出的那样,如果您需要集合,大多数语言也支持它们。许多人会在后台使用哈希表来执行此操作,但这也是一个实现细节。