クラスWeakHashMap<K,V>
- 型パラメータ:
K- このマップによって保持されるキーのタイプV- マップされた値のタイプ
- すべての実装されたインタフェース:
Map<K,V>
Mapインタフェースのハッシュ表ベースの実装。 WeakHashMap内のエントリは、そのキーが通常の使用でなくなったときに自動的に削除されます。 より正確には、指定されたキーのマッピングが存在しても、ガベージ・コレクタがキーを破棄するのを防ぐことはできません。つまりガベージ・コレクタが、そのキーをファイナライズ可能にし、ファイナライズしてから回収するのを防ぐことはできません。 キーが破棄されると、そのエントリがマップから効果的に削除されるため、このクラスは他のMap実装とは若干異なる動作をします。
null値とnullキーはどちらもサポートされています。 このクラスには、HashMapクラスのパフォーマンス特性に類似したパフォーマンス特性があり、「初期容量」および「負荷率」の効率パラメータが同じです。
ほとんどのコレクション・クラスと同じように、このクラスは同期化されていません。 同期化されたWeakHashMapは、Collections.synchronizedMapメソッドを使用して構築できます。
このクラスは主に、equalsメソッドが==演算子を使用してオブジェクト・アイデンティティをテストするキー・オブジェクトで使用することを目的としています。 このようなキーを破棄すると、再作成できなくなるため、あとでWeakHashMap内でそのキーをルックアップすることは不可能で、そのエントリが削除されたことに驚きます。 このクラスは、equalsメソッドがStringインスタンスなどのオブジェクト・アイデンティティに基づいていないキー・オブジェクトと完全に連携します。 ただし、このような再利用可能なキー・オブジェクトでは、キーが破棄されたWeakHashMapエントリの自動削除は、混乱している可能性があります。
WeakHashMapクラスの動作は、ガベージ・コレクタのアクションによって一部異なるため、慣れ親しんだいくつかの(必須ではありませんが) Map不変は、このクラスでは保持されません。 ガベージ・コレクタはいつでもキーを破棄できるため、WeakHashMapは、不明なスレッドがエントリを暗黙的に削除しているかのように動作する可能性があります。 特に、WeakHashMapインスタンスで同期し、そのミューテータ・メソッドを呼び出さない場合でも、isEmptyメソッドがfalseを返し、trueを返すため、containsKeyメソッドがtrueを返し、その後getメソッドに対してfalseを返すように、sizeメソッドが時間の経過とともに小さい値を返すことができます。putメソッドがnullを返し、removeメソッドがfalseを戻して、以前マップに現れたキーを返し、キー・セット、値コレクションおよびエントリ・セットを連続して調べると、要素の数が連続して小さくなるように、nullを返します。
WeakHashMap内の各キー・オブジェクトは、弱い参照の参照として間接的に格納されます。 このため、キーは、それに対する弱参照がマップの内外ともにガベージ・コレクタによってクリアされてからのみ自動的に削除されます。
実装に関するノート: WeakHashMap内の値オブジェクトは、通常の強力な参照によって保持されます。 このため、値のオブジェクトが直接的にも間接的にも強くそれ自体のキーを参照しないようにしてください。そうすれば、キーが破棄されないようになります。 値オブジェクトは、WeakHashMap自体を介してキーに間接的に参照される場合があります。つまり、値オブジェクトは、関連付けられた値オブジェクトを持つ他のキー・オブジェクトを強く参照し、次に、最初の値オブジェクトのキーを強く参照する場合があります。 マップ内の値が、それらへの強い参照を保持しているマップに依存していない場合、これに対処する1つの方法は、挿入する前にWeakReferences内で値をラップすることです: m.put(key, new WeakReference(value))、および各getのアン・ラップ。
このクラスのすべてのコレクション・ビュー・メソッドによって返されるコレクションのiteratorメソッドによって返されるイテレータは、フェイルファストです。 イテレータの作成後に、イテレータ自体のremoveメソッド以外の方法でマップが構造的に変更されると、イテレータはConcurrentModificationExceptionをスローします。 このように、並行して変更が行われると、イテレータは、将来の予測できない時点において予測できない動作が発生する危険を回避するために、ただちにかつ手際よく例外をスローします。
通常、非同期の並行変更がある場合、確かな保証を行うことは不可能なので、イテレータのフェイルファストの動作を保証することはできません。 フェイルファスト・イテレータは、ベスト・エフォート・ベースでConcurrentModificationExceptionをスローします。 したがって、正確を期すためにこの例外に依存するプログラムを書くことは誤りです。イテレータのフェイルファストの動作はバグを検出するためにのみ使用すべきです。
このクラスは、Java Collections Frameworkのメンバーです。
- 導入されたバージョン:
- 1.2
- 関連項目:
-
ネストされたクラスのサマリー
クラスjava.util.AbstractMapで宣言されたネストされたクラス/インタフェース
AbstractMap.SimpleEntry<K,V>, AbstractMap.SimpleImmutableEntry<K, V> -
コンストラクタのサマリー
コンストラクタコンストラクタ説明デフォルトの初期容量(16)および負荷係数(0.75)を使用して、新しい空のWeakHashMapを作成します。WeakHashMap(int initialCapacity) 指定された初期容量およびデフォルトのロード・ファクタ(0.75)を使用して、新しい空のWeakHashMapを作成します。WeakHashMap(int initialCapacity, float loadFactor) 指定された初期容量と指定された負荷係数を持つ、空の新しいWeakHashMapを構築します。WeakHashMap(Map<? extends K, ? extends V> m) 指定されたマップと同じマッピングで新しいWeakHashMapを作成します。 -
メソッドのサマリー
修飾子と型メソッド説明voidclear()すべてのマッピングをマップから削除します。booleancontainsKey(Object key) 指定されたキーのマッピングがこのマップに含まれている場合にtrueを返します。booleancontainsValue(Object value) このマップが1つまたは複数のキーと指定された値をマッピングしている場合にtrueを返します。entrySet()このマップに含まれるマッピングのSetビューを返します。指定されたキーがマップされている値を返します。そのキーのマッピングがこのマップに含まれていない場合はnullを返します。booleanisEmpty()このマップがキーと値のマッピングを保持しない場合にtrueを返します。keySet()このマップに含まれるキーのSetビューを返します。static <K,V> WeakHashMap <K, V> newWeakHashMap(int numMappings) 予想されるマッピング数に適した新しい空のWeakHashMapを作成します。指定された値と指定されたキーをこのマップに関連付けます。void指定されたマップからすべてのマッピングをマップにコピーします。キーのマッピングがある場合に、そのマッピングをこの弱ハッシュ・マップから削除します。intsize()このマップ内のキー値マッピングの数を返します。values()このマップに含まれる値のCollectionビューを返します。クラスjava.util.AbstractMapで宣言されたメソッド
clone, equals, hashCode, toStringインタフェースjava.util.Mapで宣言されたメソッド
compute, computeIfAbsent, computeIfPresent, equals, forEach, getOrDefault, hashCode, merge, putIfAbsent, remove, replace, replace, replaceAll
-
コンストラクタの詳細
-
WeakHashMap
public WeakHashMap(int initialCapacity, float loadFactor) 指定された初期容量と指定された負荷係数を持つ、空の新しいWeakHashMapを構築します。- APIのノート:
- 予想される数のマッピングに対応する初期容量を持つ
WeakHashMapを作成するには、newWeakHashMapを使用します。 - パラメータ:
initialCapacity-WeakHashMapの初期容量loadFactor-WeakHashMapの負荷係数- スロー:
IllegalArgumentException-初期容量が負の場合、または負荷係数が正でない場合。
-
WeakHashMap
public WeakHashMap(int initialCapacity) 指定された初期容量およびデフォルトのロード・ファクタ(0.75)を使用して、新しい空のWeakHashMapを作成します。- APIのノート:
- 予想される数のマッピングに対応する初期容量を持つ
WeakHashMapを作成するには、newWeakHashMapを使用します。 - パラメータ:
initialCapacity-WeakHashMapの初期容量- スロー:
IllegalArgumentException- 初期容量が負の場合
-
WeakHashMap
public WeakHashMap()デフォルトの初期容量(16)および負荷係数(0.75)を使用して、新しい空のWeakHashMapを作成します。 -
WeakHashMap
指定されたマップと同じマッピングで新しいWeakHashMapを作成します。WeakHashMapは、デフォルトのロード・ファクタ(0.75)と、指定したマップにマッピングを保持するのに十分な初期容量で作成されます。- パラメータ:
m- マッピングがこのマップに配置されるマップ- スロー:
NullPointerException- 指定されたマップがnullの場合- 導入されたバージョン:
- 1.3
-
-
メソッドの詳細
-
size
-
isEmpty
-
get
指定されたキーがマップされている値を返します。そのキーのマッピングがこのマップに含まれていない場合はnullを返します。より正式には、このマップにキー
kから値vへのマッピング(Objects.equals(key, k)など)が含まれる場合、このメソッドはvを返します。それ以外の場合はnullを返します。 (このようなマッピングは1つのみ存在できます。)戻り値
nullは、マップがキーのマッピングを保持していないことを示すとはかぎりません。つまり、マップが明示的にキーをnullにマップすることもあります。containsKey操作を使うと、これら2つのケースを見分けることができます。 -
containsKey
public boolean containsKey(Object key) 指定されたキーのマッピングがこのマップに含まれている場合にtrueを返します。- 定義:
- インタフェース
Map<K,内のV> containsKey - オーバーライド:
- クラス
AbstractMap<K,のV> containsKey - パラメータ:
key- このマップ内にあるかどうかが判定されるキー- 戻り値:
keyのマッピングがある場合はtrue、そうでない場合はfalse
-
put
指定された値と指定されたキーをこのマップに関連付けます。 マップが以前にこのキーのマッピングを保持していた場合、古い値が置き換えられます。 -
putAll
-
remove
キーのマッピングがある場合に、そのマッピングをこの弱ハッシュ・マップから削除します。 さらに正式には、このマップにキーkから値vへのマッピング((key==null ? k==null : key.equals(k))など)が含まれている場合、そのマッピングは削除されます。 マップはこのようなマッピングを1つだけ含めることができます。このマップが以前にキーを関連付けた値を返します。マップにキーのマッピングが含まれていない場合は
nullを返します。nullの戻り値は、「必ずしも」マップにキーのマッピングが含まれていないことを示しません。また、マップによってキーがnullに明示的にマップされている可能性もあります。呼出しが戻ると、マップは指定されたキーのマッピングを含まなくなります。
-
clear
-
containsValue
public boolean containsValue(Object value) このマップが1つまたは複数のキーと指定された値をマッピングしている場合にtrueを返します。- 定義:
- インタフェース
Map<K,内のV> containsValue - オーバーライド:
- クラス
AbstractMap<K,のV> containsValue - パラメータ:
value- このマップにあるかどうかが判定される値- 戻り値:
- このマップが1つまたは複数のキーを指定された値にマッピングしている場合は
true
-
keySet
このマップに含まれるキーのSetビューを返します。 セットはマップと連動しているので、マップに対する変更はセットに反映され、また、セットに対する変更はマップに反映されます。 セットの反復処理中にマップが変更された場合、反復処理の結果は定義されていません(イテレータ自身のremoveオペレーションを除く)。 セットは要素の削除をサポートします。Iterator.remove、Set.remove、removeAll、retainAll、およびclearオペレーションで対応するマッピングをマップから削除します。addまたはaddAll操作はサポートされていません。 -
values
public Collection<V> values()このマップに含まれる値のCollectionビューを返します。 コレクションはマップと連動しているので、マップに対する変更はコレクションに反映され、またコレクションに対する変更はマップに反映されます。 コレクションの反復処理中にマップが変更された場合、反復処理の結果は定義されません(イテレータ自身のremoveオペレーションを除く)。 コレクションは要素の削除をサポートしており、対応するマッピングをマップから削除できます。削除は、Iterator.remove、Collection.remove、removeAll、retainAll、およびclearオペレーションを通して行います。addまたはaddAll操作はサポートされていません。 -
entrySet
このマップに含まれるマッピングのSetビューを返します。 セットはマップと連動しているので、マップに対する変更はセットに反映され、また、セットに対する変更はマップに反映されます。 セットの反復処理中にマップが変更された場合、反復処理の結果は定義されません(イテレータ自身のremoveオペレーション、またはイテレータにより返されるマップ・エントリに対するsetValueオペレーションを除く)。 セットは要素の削除をサポートしており、対応するマッピングをマップから削除できます。削除は、Iterator.remove、Set.remove、removeAll、retainAll、およびclearオペレーションを通して行います。addまたはaddAll操作はサポートされていません。 -
newWeakHashMap
public static <K,V> WeakHashMap<K,V> newWeakHashMap(int numMappings) 予想されるマッピング数に適した新しい空のWeakHashMapを作成します。 返されるマップではデフォルトのロード係数0.75が使用され、初期容量は通常十分に大きいため、マップのサイズを変更せずに必要な数のマッピングを追加できます。- 型パラメータ:
K- 新しいマップによって保持されるキーのタイプV- マップされた値のタイプ- パラメータ:
numMappings- マッピングの予想数- 戻り値:
- 新しく作成されたマップ
- スロー:
IllegalArgumentException- numMappingsが負の場合- 導入されたバージョン:
- 19
-