【发布时间】: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 会发生吗?