- 型パラメータ:
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
を作成します。 -
メソッドのサマリー
修飾子と型メソッド説明void
clear()
すべてのマッピングをマップから削除します。boolean
containsKey
(Object key) 指定されたキーのマッピングがこのマップに含まれている場合にtrue
を返します。boolean
containsValue
(Object value) このマップが1つまたは複数のキーと指定された値をマッピングしている場合にtrue
を返します。entrySet()
このマップに含まれるマッピングのSet
ビューを返します。指定されたキーがマップされている値を返します。そのキーのマッピングがこのマップに含まれていない場合はnull
を返します。boolean
isEmpty()
このマップがキーと値のマッピングを保持しない場合にtrue
を返します。keySet()
このマップに含まれるキーのSet
ビューを返します。static <K,
V> WeakHashMap <K, V> newWeakHashMap
(int numMappings) 予想されるマッピング数に適した新しい空のWeakHashMapを作成します。指定された値と指定されたキーをこのマップに関連付けます。void
指定されたマップからすべてのマッピングをマップにコピーします。キーのマッピングがある場合に、そのマッピングをこの弱ハッシュ・マップから削除します。int
size()
このマップ内のキー値マッピングの数を返します。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
-