2 回答
![?](http://img1.sycdn.imooc.com/54584cde0001d19202200220-100-100.jpg)
TA贡献1873条经验 获得超9个赞
它将对HashMap的条目集执行线性搜索。它将通过查看您的key(by 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;
}
![?](http://img1.sycdn.imooc.com/5458632800010f8802200220-100-100.jpg)
TA贡献1824条经验 获得超8个赞
如果我没记错我的老师;
正如您所说,JavasHashMap<K,V>
使用hashcode
(继承自Object
,最好由您的键覆盖)来定位它应该在底层结构中存储键值对的位置。
如果<K,V>
同一位置存在多个对,则调用get(K k)
将使用您的 keysboolean equals(Object o)
方法来确定您想要哪个(也由 继承Object
),或者调用put
将使用相同的技术来确定用您的新值替换哪个值一。
然而,它将首先检查参考。如果您的密钥和 hasmap 中的一个存储相同,则不会使用equals
.
添加回答
举报