为了账号安全,请及时绑定邮箱和手机立即绑定

HashMap 在内部检查两个键是否相等,正在使用哪种算法?

HashMap 在内部检查两个键是否相等,正在使用哪种算法?

鸿蒙传说 2021-06-07 13:42:07
hashcode() 方法生成对象的哈希码,这有助于识别准确的桶/索引。假设在这个存储桶(索引)中已经存在很少的键值对,那么应该将要插入的键与所有当前键进行比较。这里使用哪种算法来搜索密钥?
查看完整描述

2 回答

?
眼眸繁星

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;

 }


查看完整回答
反对 回复 2021-06-10
?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

如果我没记错我的老师;

正如您所说,JavasHashMap<K,V>使用hashcode(继承自Object,最好由您的键覆盖)来定位它应该在底层结构中存储键值对的位置。

如果<K,V>同一位置存在多个对,则调用get(K k)将使用您的 keysboolean equals(Object o)方法来确定您想要哪个(也由 继承Object),或者调用put将使用相同的技术来确定用您的新值替换哪个值一。

然而,它将首先检查参考。如果您的密钥和 hasmap 中的一个存储相同,则不会使用equals.


查看完整回答
反对 回复 2021-06-10
  • 2 回答
  • 0 关注
  • 163 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信