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;
이 오브젝트 k가 어떻게 나타나는지 설명하십시오.오브젝트 k 란 무엇입니까?
귀하의 혼란을 이해하지 못합니다. 그것은 누군가가 거기에 그것을 선언했기 때문에 나타납니다. 이해가 안되는 것은 무엇입니까? –
'Object k'는 genric type'K key'와 관련이 없습니다. 그것은'Object foo'라는 이름이 될 수 있고 코드는 여전히 똑같은 것을 할 것입니다 – ortis
k가 여기에 사용됩니다 : (k = e.key) == 키. 개체가 참조 평등한지 확인하는 일종의 복싱 인 것처럼 보입니다 (키 유형이 'K'(기본 키 유형)이 기본 유형 인 경우 상자에 표시되고 참조 평등이 아니므로 false를 반환 함). 그러나 둘 다 원시 타입이 아닌 경우 두 객체가 동일한 참조인지 확인합니다. 나중에 key.equals (k) 평등 검사를하므로 잠재적 인 호출을하지 않는 것을 확인하는 성능 검사 일뿐입니다 값 비싼 .equals() 메소드가 키가 같은 객체 인 경우 – kha