HashMap と HashSet は null オブジェクトを許可するので、これらの「null」オブジェクトのハッシュ値は何になるでしょうか? Javaでどのように計算/処理されていますか?
質問する
1956 次
2 に答える
6
openJDK に組み込まれている HashMap は、エントリを保持するために使用する配列の最初のバケットに null 参照を入れるだけです。
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 }
于 2012-06-25T05:55:10.397 に答える
2
たとえばHashMap
、これは単なる特殊なケースです。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;
}
于 2012-06-25T05:55:30.450 に答える