哪个哈希码哈希映射实现用于值检索
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
而 而不是 的值。
我知道 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
而 而不是 的值。