hashcode()方法生成对象的哈希码,这有助于识别确切的存储桶/索引。 可以说,在此存储桶(索引)中,已经存在很少的键值对,然后将要插入的键与所有当前键进行比较。 此处使用哪种算法搜索关键字?
答案 0 :(得分:1)
它将对HashMap
的条目集执行线性搜索。它将通过查看您的key
(按hash
)来获得条目集,然后逐一遍历条目集(您的多个键值对/对),然后为您检查正确的键。
这是实现
public V get(Object key) {
if (key == null)
return getForNullKey();
int hash = hash(key.hashCode());
for (Entry<K,V> e = table[indexFor(hash, table.length)];e != null;e = e.next) {
Object k;
if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
return e.value;
}
}
return null;
}
答案 1 :(得分:0)
如果我没记错我的老师;
Java HashMap<K,V>
使用hashcode
(从Object
继承,最好由您的键覆盖)确定您应该在基础结构中存储键值对的位置
如果在同一位置存在几对<K,V>
,则对get(K k)
的调用将使用您的密钥boolean equals(Object o)
方法来找出您想要的密钥对(也由{{1 }}),或者调用Object
会使用相同的技术来找出要用新值替换的值。
但是它将首先检查引用。如果您的密钥和hasmap中的一个存储是 same ,则它将不会使用put
执行检查。