3

HashMapnull1 つのキーと複数の値を許可しnullます。

がキー/値をどのようにHashMap処理するか知りたいですか? null内部でどのように処理されているということですか?

4

3 に答える 3

0

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;
}
于 2015-11-14T14:02:55.817 に答える