【问题标题】:How can hashmap guarantee same `index` for key used again? [duplicate]hashmap 如何保证再次使用的键具有相同的“索引”? [复制]
【发布时间】:2013-10-13 19:47:42
【问题描述】:

hashmap 计算索引的方式如下代码 -

static int indexFor(int h, int length) {
    return h & (length-1);
}

现在假设一个密钥被第二次使用(假设另一个 put)并且当时长度已经改变。在这种情况下,indexFor 在长度为 16 时与长度为 64 时如何返回相同的索引?

【问题讨论】:

  • 谢谢,但很多时候这样的重复无法搜索到。
  • @Jay 对我来说这看起来像是关于相同代码的不同问题 - 尽管 YMMV。

标签: java hash hashmap


【解决方案1】:

当哈希表的length 发生更改时,必须重建整个表以确保每个条目都位于它现在应该在的位置。 (这称为 重新散列。)

这是一项相当昂贵的操作,因此代码会尽量减少它发生的频率。这就是为什么告诉HashMap 在第一次构造它时需要多少元素是很有用的——它可以避免在填充表格时进行任何重新散列。

【讨论】:

    【解决方案2】:

    长度不一定是哈希中的项目数,而是哈希的最大容量。

    通常它是一个质数,只要没有空间添加额外的项目,它就会增加。在这种情况下,容量会增加到下一步并执行rehashing

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-06
      • 2013-05-12
      • 1970-01-01
      • 1970-01-01
      • 2013-10-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多