0
public V put(K key, V value) {
if (table == EMPTY_TABLE) {
inflateTable(threshold);
}
if (key == null)
return putForNullKey(value);
int hash = hash(key);
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;
}
我想了解HashMap的實現。我理解除了這一行之外的所有內容 - 對象k;
請解釋這個Object k是怎麼出現的?什麼是對象k?
我不明白你的困惑。看起來是因爲有人在那裏宣佈它。什麼是沒有意義的? –
「對象k」與genric類型「K key」無關。它可以命名爲'Object foo',代碼仍然可以做同樣的事情 – ortis
k在這裏使用:(k = e.key)==鍵。似乎是某種拳擊來檢查對象是否是引用相等的(如果你的'K'(你的Key的類型)是一個基本類型,它會將它封閉並且會返回false,因爲它們不會被引用相等但是如果它們都是非原始類型,它將檢查兩個對象是否是相同的引用。由於後面有key.equals(k)相等檢查,這只是一個性能檢查,以確保您不會調用潛在的昂貴的.equals()方法,如果你的鑰匙是同一個對象 – kha