- 型パラメータ:
- K- このマップで保持されるキーの型
- V- マップされる値の型
- すべての実装されたインタフェース:
- Map<K,V>
public class WeakHashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>
Mapインタフェースの実装です。 WeakHashMap内のエントリは、そのキーが普通に使われることがなくなると自動的に削除されます。 より正確には、指定されたキーのマッピングが存在しても、ガベージ・コレクタがキーを破棄するのを防ぐことはできません。つまりガベージ・コレクタが、そのキーをファイナライズ可能にし、ファイナライズしてから回収するのを防ぐことはできません。 キーが破棄された場合、そのエントリが事実上マップから削除されるので、このクラスはほかのMap実装とは少し違った動作をします。 
  null値とnullキーはどちらもサポートされています。 このクラスはHashMapクラスと同じようなパフォーマンス特性を持ち、初期容量と負荷係数の同じ効率パラメータを持ちます。 
 
 ほとんどのコレクション・クラスと同じように、このクラスは同期化されていません。 同期化されているWeakHashMapはCollections.synchronizedMapメソッドを使って作成できます。 
 
 このクラスは、equalsメソッドが==演算子を使ってオブジェクト識別情報を判定するキー・オブジェクトと一緒に使うことを主な目的としています。 このようなキーが破棄されると二度と作り直されることはないので、後にWeakHashMap内のそのキーの検索を行って、そのエントリが削除されていたことに驚くような事態は起こり得ません。 このクラスは、Stringインスタンスなどのオブジェクト識別情報に基づかないequalsメソッドを持つキー・オブジェクトも適切に処理します。 ただし、そのような作り直し可能なキー・オブジェクトでは、すでにキーが破棄されたWeakHashMapエントリの自動的な削除によって、混乱が生じる場合があります。 
 
 WeakHashMapクラスの動作の一部はガベージ・コレクタのアクションに依存するので、よく知られていても必要ではない、いくつかのMapインバリアントはこのクラスに適しません。 ガベージ・コレクタはキーをいつでも破棄できるので、WeakHashMapは未知のスレッドが通知なしでエントリを削除中であるかのように動作します。 特に、WeakHashMapインスタンス上で同期をとり、その変更用メソッドのどれも呼び出さない場合でも、sizeメソッドはより小さな値を時間の経過とともに返すことがあります。isEmptyメソッドはfalseを返してからtrueを返すことがあります。containsKeyメソッドは、指定されたキーに対してtrueを返したあとでfalseを返すことがあります。getメソッドは、指定されたキーの値を返したあとでnullを返すことがあります。putメソッドとremoveメソッドは、以前マップにあるように見えたキーに対してそれぞれnullとfalseを返すことがあります。キー・セット、値コレクション、エントリ・セットを連続して検査すると、出力される要素の数が少なくなっていくことがあります。 
 
 WeakHashMap内の各キー・オブジェクトは弱参照のリファレントとして間接的に格納されています。 このため、キーは、それに対する弱参照がマップの内外ともにガベージ・コレクタによってクリアされてからのみ自動的に削除されます。 
 
 実装にあたってのノート: WeakHashMap内の値オブジェクトは、通常の強参照によって保持されます。 このため、値のオブジェクトが直接的にも間接的にも強くそれ自体のキーを参照しないようにしてください。そうすれば、キーが破棄されないようになります。 値オブジェクトはWeakHashMap自体を介してそのキーを間接的に参照できることに注意してください。つまり、値オブジェクトがほかのキー・オブジェクトを強く参照し、それに関連付けられている値オブジェクトが今度は最初の値オブジェクトのキーを強く参照することがあります。 マップ内の値が、それらへの強参照を保持するマップに依存していない場合、これに対処する方法の1つは、m.put(key, new WeakReference(value))のように、値自体をWeakReferences内にラップした後で挿入することです。そして、getを呼び出すたびにそのラップを解除します。 
 
このクラスのすべてのコレクション・ビュー・メソッドによって返されるコレクションのiteratorメソッドによって返されるイテレータは、フェイルファストです。イテレータの作成後に、イテレータ自体のremoveメソッド以外の方法でマップが構造的に変更されると、イテレータはConcurrentModificationExceptionをスローします。 このように、並行して変更が行われると、イテレータは、将来の予測できない時点において予測できない動作が発生する危険を回避するために、ただちにかつ手際よく例外をスローします。 
 
通常、非同期の並行変更がある場合、確かな保証を行うことは不可能なので、イテレータのフェイルファストの動作を保証することはできません。 フェイルファスト・イテレータは、ベスト・エフォート・ベースでConcurrentModificationExceptionをスローします。 したがって、正確を期すためにこの例外に依存するプログラムを書くことは誤りです。イテレータのフェイルファストの動作はバグを検出するためにのみ使用すべきです。 
 
このクラスは、Java Collections Frameworkのメンバーです。
- 導入されたバージョン:
- 1.2
- 関連項目:
- HashMap,- WeakReference
- 
ネストされたクラスのサマリークラス java.util.AbstractMapで宣言されたネストされたクラス/インタフェースAbstractMap.SimpleEntry<K,V>, AbstractMap.SimpleImmutableEntry<K,V>
- 
コンストラクタのサマリーコンストラクタ コンストラクタ 説明 WeakHashMap()デフォルトの初期容量(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を返します。Set<Map.Entry<K,V>>entrySet()このマップに含まれるマッピングのSetビューを返します。Vget(Object key)指定されたキーがマップされている値を返します。そのキーのマッピングがこのマップに含まれていない場合はnullを返します。booleanisEmpty()このマップがキーと値のマッピングを保持しない場合にtrueを返します。Set<K>keySet()このマップに含まれるキーのSetビューを返します。Vput(K key, V value)指定された値と指定されたキーをこのマップに関連付けます。voidputAll(Map<? extends K,? extends V> m)指定されたマップからすべてのマッピングをマップにコピーします。Vremove(Object key)キーのマッピングがある場合に、そのマッピングをこの弱ハッシュ・マップから削除します。intsize()このマップ内のキー値マッピングの数を返します。Collection<V>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
- 
コンストラクタの詳細- 
WeakHashMappublic WeakHashMap(int initialCapacity, float loadFactor)指定された初期容量と指定された負荷係数を持つ、新しい空のWeakHashMapを作成します。- パラメータ:
- initialCapacity-- WeakHashMapの初期容量
- loadFactor-- WeakHashMapの負荷係数
- 例外:
- IllegalArgumentException-初期容量が負の場合、または負荷係数が正でない場合。
 
- 
WeakHashMappublic WeakHashMap(int initialCapacity)指定された初期容量とデフォルトの負荷係数(0.75)を持つ、新しい空のWeakHashMapを作成します。- パラメータ:
- initialCapacity-- WeakHashMapの初期容量
- 例外:
- IllegalArgumentException- 初期容量が負の場合
 
- 
WeakHashMappublic WeakHashMap()デフォルトの初期容量(16)と負荷係数(0.75)を持つ、新しい空のWeakHashMapを作成します。
- 
WeakHashMap指定されたマップと同じマッピングを持つ、新しいWeakHashMapを構築します。WeakHashMapは、デフォルトの負荷係数(0.75)、および指定されたマップのマッピングを保持するのに十分な初期容量で作成されます。- パラメータ:
- m- マッピングがこのマップに配置されるマップ
- 例外:
- NullPointerException- 指定されたマップがnullの場合
- 導入されたバージョン:
- 1.3
 
 
- 
- 
メソッドの詳細- 
sizepublic int size()このマップ内のキー値マッピングの数を返します。 この結果はスナップショットとなり、参照が行われなくなるため、次のアクセスが試行される前に削除される未処理のエントリを反映しない場合があります。
- 
isEmptypublic boolean isEmpty()このマップがキーと値のマッピングを保持しない場合にtrueを返します。 この結果はスナップショットとなり、参照が行われなくなるため、次のアクセスが試行される前に削除される未処理のエントリを反映しない場合があります。
- 
get指定されたキーがマップされている値を返します。そのキーのマッピングがこのマップに含まれていない場合はnullを返します。より正式には、このマップにキー kからObjects.equals(key, k)のような値vへのマッピングが含まれている場合、このメソッドはvを返します; それ以外の場合は、nullを返します。 (このようなマッピングは1つのみ存在できます。)戻り値 nullは、マップがキーのマッピングを保持していないことを示すとはかぎりません。つまり、マップが明示的にキーをnullにマップすることもあります。containsKey操作を使うと、これら2つのケースを見分けることができます。- 定義:
- インタフェースMap<K,V>内のget
- オーバーライド:
- クラスAbstractMap<K,V>のget
- パラメータ:
- key- 関連付けられた値が返されるキー
- 戻り値:
- 指定されたキーがマップされている値。そのキーのマッピングがこのマップに含まれていない場合はnull
- 関連項目:
- put(Object, Object)
 
- 
containsKeypublic boolean containsKey(Object key)指定されたキーのマッピングがこのマップに含まれている場合にtrueを返します。- 定義:
- インタフェースMap<K,V>内のcontainsKey
- オーバーライド:
- クラスAbstractMap<K,V>のcontainsKey
- パラメータ:
- key- このマップ内にあるかどうかが判定されるキー
- 戻り値:
- keyに対するマッピングがある場合は- true、そうでない場合は- false
 
- 
put指定された値と指定されたキーをこのマップに関連付けます。 マップが以前にこのキーのマッピングを保持していた場合、古い値が置き換えられます。
- 
putAll指定されたマップからすべてのマッピングをマップにコピーします。 これにより、マップが指定されたマップ内に現在あるキーのすべてに対して持っていたマッピングが置き換えられます。- 定義:
- インタフェースMap<K,V>内のputAll
- オーバーライド:
- クラスAbstractMap<K,V>のputAll
- パラメータ:
- m- このマップに格納されるマッピング。
- 例外:
- NullPointerException- 指定されたマップがnullの場合。
 
- 
removeキーのマッピングがある場合に、そのマッピングをこの弱ハッシュ・マップから削除します。 つまり、(key==null ? k==null : key.equals(k))となるキーkから値vへのマッピングがこのマップに含まれる場合、このマッピングは削除されます。 マップはこのようなマッピングを1つだけ含めることができます。このマップが以前にこのキーを関連付けていた値を返します。キーに対するマッピングがマップになかった場合は nullを返します。 戻り値のnullは、マップがキーのマッピングを保持していなかったことを示すとはかぎりません。つまり、マップが明示的にキーをnullにマップしていた可能性もあります。呼出しが戻ると、マップは指定されたキーのマッピングを含まなくなります。 
- 
clearpublic void clear()すべてのマッピングをマップから削除します。 この呼出しが戻ると、マップは空になります。
- 
containsValuepublic 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操作はサポートされていません。
- 
valuespublic 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操作はサポートされていません。
 
-