哪个哈希码哈希映射实现用于值检索

Which hash code hash map implementation uses for value retrieval

我知道 hashmap 实际上使用 hashcode 来存储和检索 hashtable 中的对象,但我的疑问是它使用的是哪个 hashcode。 map 实际上包含键的哈希码和值的哈希码。让我们这样考虑

Map<String,String> student=new HashMap();
student.put("name", "foo");
System.out.println("name".hashCode());
System.out.println("foo".hashCode());

这里 name(key) 的 hashcode 是 3373707 foo(value) 的哈希码是 101574

我的疑问是应该使用哪一个来存储和检索对象

HashMap中的以下代码可以看出,它使用了自己的哈希函数:

public V put(K key, V value) {
    return putVal(hash(key), key, value, false, true);
}

static final int hash(Object key) {
    int h;
    return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}

它使用对象的 hashCode,但 xor 将它算术右移 16 次。

为了具体回答您的问题,它使用键的 hashCode 而不是 的值。