2

有効な Java の項目 22 に従って、

多くの Map 実装には、マップ内のキーと値のペアごとに内部 Entry オブジェクトがあります。各エントリはマップに関連付けられていますが、エントリのメソッド (getKey、getValue、および setValue) はマップにアクセスする必要はありません。

それが何を意味するのか説明できますか?これらの関数が Map 内部に依存していないことを示すために、典型的な Map 実装の例を挙げていただけますか?

4

2 に答える 2

2

これはjava.util.HashMap.Entryの実装です

static class Entry<K,V> implements Map.Entry<K,V> {
        final K key;
        V value;
        Entry<K,V> next;
        final int hash;

        ...

        public final K getKey() {
            return key;
        }

        public final V getValue() {
            return value;
        }

        public final V setValue(V newValue) {
            V oldValue = value;
            value = newValue;
            return oldValue;
        }
        ...

ご覧のとおり、getKey、getValue、およびsetValueは、Entryのフィールドでのみ機能し、HashMap自体にアクセスする必要はありません。

ただし、HashMapはもちろんそのエントリにアクセスする必要があるため、フィールドに配列として保持します。

public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable {
    ...
    Entry[] table;
    ...
于 2012-12-31T05:50:47.967 に答える
0

マップは多くのEntryオブジェクトで構成されています。Entry はキーと値のペアと考えることができます。

エントリが含まれるマップであり、エントリにはマップへのアクセス権がありません。

エントリは自身のフィールドにアクセスできますが、ハッシュマップ内の他のエントリにはアクセスできません。つまり、エントリは自身の含まれるフィールドにゲッターとセッターを提供できますが、HashMap にはアクセスできません。

于 2012-12-31T05:54:59.163 に答える