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都在表[x]中),e.hash == hash
将始终返回true。代码e.hash == hash
是否需要.put()
方法?
唯一的解释是在hash()
和indexFor()
方法操作之后的不同key.hashCode(),结果可能是相同的,因此代码将是必要的。< / p>
我的回答是对的吗?谁能告诉我,是否有必要e.hash == hash
?
答案 0 :(得分:0)
e.hash == hash
只是一种优化;它不是绝对必要的。您已经在比较同一个哈希桶中的元素,如果两个元素是.equals
,那么它们就匹配了。唯一的一点是尽量减少对散列与散列表大小相同的元素的昂贵.equals
检查。