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

Posted

技术标签:

【中文标题】哪个哈希码哈希映射实现用于值检索【英文标题】:Which hash code hash map implementation uses for value retrieval 【发布时间】:2017-10-04 23:16:40 【问题描述】:

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

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

在这里,名称(键)的哈希码是 3373707 foo(value) 的哈希码是 101574

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

【问题讨论】:

【参考方案1】:

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不是的值。

【讨论】:

什么意思? 哦,我明白了,如果您还有其他问题,请随时问我!谢谢你:) 我一定会的

以上是关于哪个哈希码哈希映射实现用于值检索的主要内容,如果未能解决你的问题,请参考以下文章

iOS中的哈希表

[数据结构] 散列表(哈希表)

哈希表详解

哈希表详解

Java数据结构——哈希表

哈希表