【问题标题】:Java hashmap method .put()Java hashmap 方法 .put()
【发布时间】:2014-10-29 11:03:37
【问题描述】:

java.util.HashMap#put(Object, Object)的源码是

public V put(K key, V value) {

    if (key == null)
        return putForNullKey(value);
    int hash = hash(key.hashCode());
    int i = indexFor(hash, table.length);
    for (Entry<K,V> e = table[i]; e != null; e = e.next) {
        Object k;
        if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
            V oldValue = e.value;
            e.value = value;
            e.recordAccess(this);
            return oldValue;
        }
    }

    modCount++;
    addEntry(hash, key, value, i);
    return null;
}

我认为如果键可以在表中获得相同的索引(例如:key1 和 key2 都在 table[x] 中),e.hash == hash 将始终返回 true。 .put() 方法是否需要代码 e.hash == hash

唯一的解释是hash()indexFor()方法操作后的key.hashCode()不同,结果可能相同,所以需要代码。

我的回答对吗?谁能告诉我,e.hash == hash 是否需要?

【问题讨论】:

  • 不是很清楚你的问题是什么。能不能详细一点。
  • e.hash != hash 会发生吗?

标签: java hash hashmap


【解决方案1】:

e.hash == hash 只是一个优化;这不是绝对必要的。您已经在比较同一个哈希桶中的元素,如果两个元素是.equals,那么它们匹配。唯一的一点是尽量减少昂贵的.equals 检查哈希与哈希表大小相同的元素。

【讨论】:

  • e.hash != hash 会发生吗?
  • 当然,如果两个哈希值相同,则哈希表大小。
猜你喜欢
  • 1970-01-01
  • 2018-08-25
  • 2022-12-17
  • 2019-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多