K
- このマップで保持されるキーの型V
- マップされる値の型public class WeakHashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>
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のメンバーです。
HashMap
, WeakReference
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を構築します。
|
修飾子と型 | メソッド | 説明 |
---|---|---|
void |
clear() |
すべてのマッピングをマップから削除します。
|
boolean |
containsKey(Object key) |
指定のキーのマッピングがこのマップに含まれている場合にtrueを返します。
|
boolean |
containsValue(Object value) |
マップが1つまたは複数のキーを指定された値にマッピングしている場合にtrueを返します。
|
Set<Map.Entry<K,V>> |
entrySet() |
このマップに含まれるマッピングの
Set ビューを返します。 |
void |
forEach(BiConsumer<? super K,? super V> action) |
このマップのすべてのエントリの処理が完了するかアクションから例外がスローされるまで、各エントリに対して指定されたアクションを実行します。
|
V |
get(Object key) |
指定されたキーがマップされている値を返します。このマップにそのキーのマッピングが含まれていない場合は
null を返します。 |
boolean |
isEmpty() |
このマップがキーと値のマッピングを保持しない場合にtrueを返します。
|
Set<K> |
keySet() |
このマップに含まれるキーの
Set ビューを返します。 |
V |
put(K key, V value) |
指定された値と指定されたキーをこのマップに関連付けます。
|
void |
putAll(Map<? extends K,? extends V> m) |
指定されたマップからすべてのマッピングをマップにコピーします。
|
V |
remove(Object key) |
キーのマッピングがある場合に、そのマッピングをこの弱ハッシュ・マップから削除します。
|
void |
replaceAll(BiFunction<? super K,? super V,? extends V> function) |
すべてのエントリが処理されるか、または関数が例外をスローするまで、各エントリの値を、そのエントリで指定された関数を呼び出した結果で置換します。
|
int |
size() |
このマップ内のキー値マッピングの数を返します。
|
Collection<V> |
values() |
このマップに含まれる値の
Collection ビューを返します。 |
clone, equals, hashCode, toString
compute, computeIfAbsent, computeIfPresent, equals, getOrDefault, hashCode, merge, putIfAbsent, remove, replace, replace
public WeakHashMap(int initialCapacity, float loadFactor)
initialCapacity
- WeakHashMapの初期容量loadFactor
- WeakHashMapの負荷係数IllegalArgumentException
-初期容量が負の場合、または負荷係数が正でない場合。public WeakHashMap(int initialCapacity)
initialCapacity
- WeakHashMapの初期容量IllegalArgumentException
- 初期容量が負の場合public WeakHashMap()
public WeakHashMap(Map<? extends K,? extends V> m)
m
- マッピングがこのマップに配置されるマップNullPointerException
- 指定されたマップがnullの場合public int size()
public boolean isEmpty()
public V get(Object key)
null
を返します。
つまり、このメソッドは、(key==null ? k==null : key.equals(k))
となるキーk
から値v
へのマッピングがこのマップに含まれている場合はv
を返し、それ以外の場合はnull
を返します。 (このようなマッピングは1つのみ存在できます。)
戻り値null
は、マップがキーのマッピングを保持していないことを示すとはかぎりません。つまり、マップが明示的にキーをnull
にマップすることもあります。 containsKey
オペレーションを使うと、これらの2つの場合を区別できます。
get
、インタフェースMap<K,V>
get
、クラスAbstractMap<K,V>
key
- 関連付けられた値が返されるキーnull
put(Object, Object)
public boolean containsKey(Object key)
containsKey
、インタフェースMap<K,V>
containsKey
、クラスAbstractMap<K,V>
key
- このマップ内にあるかどうかが判定されるキーpublic V put(K key, V value)
public void putAll(Map<? extends K,? extends V> m)
putAll
、インタフェースMap<K,V>
putAll
、クラスAbstractMap<K,V>
m
- このマップに格納されるマッピング。NullPointerException
- 指定されたマップがnullの場合。public V remove(Object key)
(key==null ? k==null : key.equals(k))
となるキーkから値vへのマッピングがこのマップに含まれる場合、このマッピングは削除されます。 (マップはこのようなマッピングを1つだけ含めることができます。)
このマップが以前にこのキーを関連付けていた値を返します。キーに対するマッピングがマップになかった場合はnullを返します。 戻り値のnullは、マップがキーのマッピングを保持していなかったことを示すとはかぎりません。つまり、マップが明示的にキーをnullにマップしていた可能性もあります。
呼出しが戻ると、マップは指定されたキーのマッピングを含まなくなります。
public void clear()
public boolean containsValue(Object value)
containsValue
、インタフェースMap<K,V>
containsValue
、クラスAbstractMap<K,V>
value
- このマップにあるかどうかが判定される値public Set<K> keySet()
Set
ビューを返します。 セットはマップと連動しているので、マップに対する変更はセットに反映され、また、セットに対する変更はマップに反映されます。 セットの反復処理中にマップが変更された場合、反復処理の結果は定義されていません(イテレータ自身のremoveオペレーションを除く)。 セットは要素の削除をサポートします。Iterator.remove、Set.remove、removeAll、retainAll、およびclearオペレーションで対応するマッピングをマップから削除します。 addまたはaddAllオペレーションはサポートしていません。 public Collection<V> values()
Collection
ビューを返します。 コレクションはマップと連動しているので、マップに対する変更はコレクションに反映され、またコレクションに対する変更はマップに反映されます。 コレクションの反復処理中にマップが変更された場合、反復処理の結果は定義されていません(イテレータ自身のremoveオペレーションを除く)。 コレクションは要素の削除をサポートします。Iterator.remove、Collection.remove、removeAll、retainAll、およびclearオペレーションで対応するマッピングをマップから削除します。 addまたはaddAllオペレーションはサポートしていません。 public Set<Map.Entry<K,V>> entrySet()
Set
ビューを返します。 セットはマップと連動しているので、マップに対する変更はセットに反映され、また、セットに対する変更はマップに反映されます。 セットの反復処理中にマップが変更された場合、反復処理の結果は定義されていません(イテレータ自身のremoveオペレーション、またはイテレータにより返されるマップ・エントリに対するsetValueオペレーションを除く)。 セットは要素の削除をサポートします。Iterator.remove、Set.remove、removeAll、retainAll、およびclearオペレーションで対応するマッピングをマップから削除します。 addまたはaddAllオペレーションはサポートしていません。 public void forEach(BiConsumer<? super K,? super V> action)
Map
public void replaceAll(BiFunction<? super K,? super V,? extends V> function)
Map
replaceAll
、インタフェースMap<K,V>
function
- 各エントリに適用する関数 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。 そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2025, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Documentation Redistribution Policyも参照してください。