Hashmap哈希码到内部表索引转换

时间:2014-07-03 14:00:21

标签: algorithm data-structures hash hashmap containers

Hashmaps通常使用桶的内部数组(表)实现。在按键访问hashmap时,我们使用特定于键类型(特定于逻辑类型)的哈希函数来获取密钥的哈希码。然后我们需要将hashcode映射到实际的内部桶表索引。

 key -> (hash function) -> hashcode -> (???) -> index in internal table

有时内部表可以缩小和扩展,具体取决于hashmap填充率。然后可能会改变hashcode->索引转换方法。

例如,我们的哈希函数返回32位无符号整数值和

时刻A:内部表容量为10000

时刻B:内部表容量为100000

通常用于执行哈希码 - >内部表索引转换的算法或方法是什么?如何解决表格大小调整问题?

2 个答案:

答案 0 :(得分:3)

通常,一个简单的模数可以完成这项任务。

要从Wikipedia中快速举例,它很简单:

hash = hashfunc(key)
index = hash % array_size

正如您所说,调整大小取决于hashmap填充率。重新分配数组(参见realloc()),然后在给定新数组大小的情况下重新计算索引,并将值复制到新索引中。

答案 1 :(得分:0)

我写了关于这个herehere

当您增加indeces向量的大小时,可以确定在较短向量上运行良好的算法在较长时间内效果较差。当你使矢量更长时,可以预先测试并使用新的算法。或者,随着当前向量中占用的indeces数量的增加,有一个背景,优先级较低的线程来测试数据上的不同算法。

正如我的一个答案中的例子所示,一个"新算法"只需要一对不同的匹配素数就可以了。