hashmap如何使用hashtable来存储和检索对象

时间:2017-05-06 15:55:54

标签: java hashmap hashtable hashcode

我知道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应该用来存储和检索哈希表中的对象

1 个答案:

答案 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值。