gpt4 book ai didi

java - 重写 hashcode() 方法后出现奇怪的结果

转载 作者:行者123 更新时间:2023-12-01 08:01:10 24 4
gpt4 key购买 nike

我有以下情况-

  1. 我正在使用泛型创建 HashMap。键是TestHashMap类型,值是String类型。

  2. 在TestHashMap的main方法中,我使用TestHashMap的三个实例作为键来存储三个不同的字符串。

  3. 我重写了 hashcode() 方法,以便它在每次调用时返回不同的整数。

  4. 然后我提取 HashMap 中的键并打印出相应的值。

这给了我完全意想不到的结果 - 三个键值对的每个值都为 null

请注意,如果我不是在 hashcode() 的不同调用中返回不同的整数,而是返回相同的整数,则一切正常。

这真的让我很困惑。任何帮助将不胜感激。

这是代码。如果按原样复制它,您应该能够运行它。

import java.util.HashMap;
import java.util.Set;

public class TestHashMap {
private static int hash = 0;
public static void main(String[] args) {
HashMap<TestHashMap,String> h = new HashMap<TestHashMap,String>();
TestHashMap thm1 = new TestHashMap();
TestHashMap thm2 = new TestHashMap();
TestHashMap thm3 = new TestHashMap();

h.put(thm1, "one");
h.put(thm2, "two");
h.put(thm3, "three");

Set<TestHashMap> keys = h.keySet();
for(TestHashMap k : keys){
System.out.println(k + " " + h.get(k));
}
}

@Override
public int hashCode(){ return hash++;}
}

最佳答案

  • 当您将一个对象放入映射中时,映射将读取该键的哈希码并将其放入适当的存储桶中;

  • 当您稍后通过同一键获取对象时,映射将再次读取该键的哈希码并查找与该键相等的对象桶;

  • 但是您的 key 每次都会为映射提供不同的哈希码。因此,可怜的 map 被欺骗去寻找错误的桶。

关于java - 重写 hashcode() 方法后出现奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25206897/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com