【问题标题】:Hashmap hashcode to internal table index conversionHashmap 哈希码到内部表索引的转换
【发布时间】:2014-08-24 16:48:21
【问题描述】:

Hashmaps 通常使用存储桶的内部数组(表)来实现。在按键访问 hashmap 时,我们使用 key-type specific(logic type specific) 散列函数获取 key 的 hashcode。然后我们需要将 hashcode 映射到实际的内部 buckets 表索引。

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

有时内部表可能会缩小和扩大,具体取决于 hashmap 填充率。那么可能hashcode->index转换方法可以稍微改变一下。

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

时刻 A:内部表容量为 10000

时刻 B:内部表容量为 100000

hashcode->internal table index转换通常使用什么算法或方法?如何为他们解决表格调整大小问题?

【问题讨论】:

    标签: algorithm data-structures hash hashmap containers


    【解决方案1】:

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

    Wikipedia 为例,很简单:

    hash = hashfunc(key)
    index = hash % array_size
    

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

    【讨论】:

    • 如果是-ve哈希值,这里对应的索引也会是-ve。
    【解决方案2】:

    我写过这个herehere

    当您增加索引向量的大小时,您可以确定在较短向量上运行良好的算法在较长向量上运行不佳。当您使向量更长时,可以预先测试并使用新算法。或者,随着当前向量中占用的索引数量的增加,有一个后台、较低优先级的线程来测试数据上的不同算法。

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

    【讨论】:

      猜你喜欢
      • 2012-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-28
      • 2013-12-05
      • 2012-04-26
      • 1970-01-01
      相关资源
      最近更新 更多