我知道hashmap实际上使用hashcode来存储和检索hashtable中的对象,但我的doupt是它使用的哈希码。 map实际上包含键值和哈希码的哈希码。让我们考虑这种方式
Map<String,String> student=new HashMap();
student.put("name", "foo");
System.out.println("name".hashCode());
System.out.println("foo".hashCode());
这里名称(密钥)的哈希码是3373707 foo(value)的哈希码是101574
我的doupt应该用来存储和检索哈希表中的对象
答案 0 :(得分:4)
正如您在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
和不值。