繁体   English   中英

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

[英]internally by the HashMap to check if two keys are equal or not which algorithm is being used?

hashcode()方法生成对象的哈希码,这有助于识别确切的存储桶/索引。 可以说,在此存储桶(索引)中,已经存在很少的键值对,然后将要插入的键与所有当前键进行比较。 此处使用哪种算法搜索关键字?

它将对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;
 }

如果我没记错我的老师;

Java HashMap<K,V>如您所说使用hashcode (从Object继承,最好由您的键覆盖)来查找应在基础结构中存储键值对的位置。

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

但是,它将首先检查参考。 如果您的密钥和hasmap中的一个存储相同 ,则它将不使用equals执行检查。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM