4
HashMap 및 HashSet에서 null 객체를 허용하므로이 'null'객체의 해시 값은 무엇입니까? Java에서 계산/처리되는 방법은 무엇입니까? 오픈 JDK에 내장null 객체에 대해 해시 코드 계산 방법
HashMap 및 HashSet에서 null 객체를 허용하므로이 'null'객체의 해시 값은 무엇입니까? Java에서 계산/처리되는 방법은 무엇입니까? 오픈 JDK에 내장null 객체에 대해 해시 코드 계산 방법
해시 맵 그냥 엔트리
예HashMap
들어
409 private V putForNullKey(V value) {
410 for (Entry<K,V> e = table[0]; e != null; e = e.next) {
411 if (e.key == null) {
412 V oldValue = e.value;
413 e.value = value;
414 e.recordAccess(this);
415 return oldValue;
416 }
417 }
418 modCount++;
419 addEntry(0, null, value, 0);
420 return null;
421 }
를 보유하는 데 사용하는 배열에서 첫 번째 버킷에 널 레퍼런스를두고, 단지 특별한 경우이다. 아래의 소스 코드는 JDK 1.6에서 가져온 것입니다 :
public V put(K key, V value) {
if (key == null)
return putForNullKey(value);
int hash = hash(key.hashCode());
...
}
/**
* Offloaded version of put for null keys
*/
private V putForNullKey(V value) {
for (Entry<K,V> e = table[0]; e != null; e = e.next) {
if (e.key == null) {
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
}
modCount++;
addEntry(0, null, value, 0);
return null;
}
NPE를 던지거나'hashCode = 0'을 사용합니다. – Bohemian