当前位置: 首页 > 知识库问答 >
问题:

hashmap如何保证再次使用的键具有相同的“索引”?[重复]

耿俊
2023-03-14

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

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

现在假设第二次使用一个键(比如说另一次put),此时长度已经改变。在这种情况下,indexFor在长度为16和长度为64时如何返回相同的索引?

共有2个答案

巢德华
2023-03-14

长度不一定是散列中的项数,而是散列的最大容量。

通常是一个质数,当没有空间添加额外的项目时,它就会增加。在这种情况下,容量将增加到下一步,并执行重新灰化

华谭三
2023-03-14

当哈希表的长度发生变化时,必须重建整个表,以确保每个条目都位于现在应该位于的位置。(这叫做重新洗牌。)

这是一个非常昂贵的操作,所以代码试图最小化它发生的频率。这就是为什么在第一次构建它时告诉HashMap期望有多少元素是有用的——它允许它在填充表时避免进行任何重新散列。

 类似资料:
  • 问题内容: 我正在查看数据库中的一个表(我没有创建该表),我发现有两个完全相同的索引(我不知道为什么这样做)只是命名不同,这可以对桌子有负面影响吗? 拿这个例子表: 问题答案: 是的,它可以起作用。 当然,如果使用这两个索引,它们会占用磁盘和内存的额外空间。 但是,它们还会使查询优化器做更多的工作来计算每个SELECT期间每个索引的收益。您拥有的索引越多,需要比较的案例就越多。因此,消除真正的冗余

  • 问题内容: 如果我有一个像 我如何根据如下索引重新塑形数据框,即 问题答案: 让我们使用,,,和: 输出:

  • 问题内容: 我有以下代码来获取地图: 如何打印带有重复键的消息“重复键”? 问题答案: 如何打印带有重复键的消息“重复键”? 使用当前代码,您将收到消息“重复键”,其中包含至少2个实例的列表,这些实例具有与对象相同的值,例如。 如何获得对应的密钥? 到目前为止,还无法获得相应的键,当前从合并功能中获得的实际上是与相同键映射的2个值,这些值需要合并以仅保留对应键的一个值。 您的问题是 Java 9

  • 我有一个哈希图,其中一些键指向相同的值。我想找到所有相等的值并打印相应的键。 这是我拥有的当前代码: 当前代码将重复项两次添加到列表中,但它也将每个键添加一次。 谢谢。

  • 目前,我有一个类分数,它允许我用三种不同的方式创建分数 对于一个整数,在这种情况下,给定的整数将是分子,分母将设置为1 有2个整数,分子和分母 最后一种方法是解析一个字符串,该字符串必须与REGEX-?\d/[1-9]\d* gcd将尽可能减少生成的分数。 我现在想实现的是,具有相同分子和分母的分数实例具有相同的引用例如。 应该返回true。 我研究了一些关于泛型和边界的章节,但我不确定这是否是我