繁体   English   中英

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

[英]Hashmap hashcode to internal table index conversion

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

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

有时内部表可能会缩小和扩展,具体取决于哈希图的填充率。 然后,可能可以对hashcode-> index转换方法进行一些更改。

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

时刻A:内部表的容量为10000

时刻B:内部表的容量为100000

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

通常,一个简单的模就可以完成工作。

Wikipedia为例,它很简单:

hash = hashfunc(key)
index = hash % array_size

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

在这里这里都写过这个。

当您增加索引的矢量的大小时,可以确保在较短的矢量上运行良好的算法在较长的矢量上运行较差。 当您将向量加长时,可以预先进行测试并使用新的算法。 或者,随着当前向量中占用索引的数量增加,请使用背景优先级较低的线程来测试数据上的不同算法。

正如我的一个答案中的示例所示,“新算法”只不过是一对不同的匹配素数。

暂无
暂无

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

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