HashMap
null
1 つのキーと複数の値を許可しnull
ます。
がキー/値をどのようにHashMap
処理するか知りたいですか? null
内部でどのように処理されているということですか?
HashMap での Null キーと値の処理
http://javaexplorer03.blogspot.in/2015/11/how-null-key-is-handled-in-hashmap.html
equals() と hashCode() は値の格納と取得に使用されるため、null キーの場合はどのように機能しますか?
Null キーは HashMap で特別に処理され、そのputForNullKey(V value) と getForNullKey()の 2 つの別個のメソッドがあります。後で null キーを検索するための get() のオフロード バージョンです。Null キーは常にインデックス 0 にマップされます。
この null ケースは、最も一般的に使用される 2 つの操作 (get と put) のパフォーマンスのために別々のメソッドに分割されていますが、他の操作では条件付きで組み込まれています。
つまり、HashMap の null キーの場合、equals() および hashcode() メソッドは使用されません。HashMap から null を取得する方法は次のとおりです。
private V getForNullKey() {
for (Entry<K,V> e = table[0]; e != null; e = e.next) {
if (e.key == null)
return e.value;
}
return null;
}
/**
* 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;
}