|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
java.lang.Objectjava.util.AbstractMap<K,V>
java.util.WeakHashMap<K,V>
K - このマップで保持されるキーの型V - マップされる値の型public class WeakHashMap<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)) のように、値自体を WeakReference 内にラップしたあとで挿入することです。そして、get を呼び出すたびにそのラップを解除します。
このクラスのすべての「コレクションビューメソッド」によって返されるコレクションの iterator メソッドによって返される反復子は、「フェイルファスト」です。反復子の作成後に、反復子自体の remove メソッド以外の方法でマップが構造的に変更されると、反復子は ConcurrentModificationException をスローします。このように、並行して変更が行われると、反復子は、将来の予測できない時点において予測できない動作が発生する危険を回避するために、ただちにかつ手際よく例外をスローします。
通常、非同期の並行変更がある場合、確かな保証を行うことは不可能なので、反復子のフェイルファストの動作を保証することはできません。フェイルファスト反復子は最善努力原則に基づき、ConcurrentModificationException をスローします。したがって、正確を期すためにこの例外に依存するプログラムを書くことは誤りです。「反復子のフェイルファストの動作はバグを検出するためにのみ使用すべきです」。
このクラスは、Java Collections Framework のメンバーです。
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)
指定された Map と同じマッピングを持つ新規の WeakHashMap を作成します。 |
|
| メソッドの概要 | |
|---|---|
void |
clear()
すべてのマッピングをマップから削除します。 |
boolean |
containsKey(Object key)
マップが指定のキーのマッピングを保持する場合に true を返します。 |
boolean |
containsValue(Object value)
マップが 1 つまたは複数のキーと指定された値をマッピングしている場合に true を返します。 |
Set<Map.Entry<K,V>> |
entrySet()
このマップに含まれるマップの Set ビューを返します。 |
V |
get(Object key)
指定されたキーがマップされている値を返します。 |
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)
キーのマッピングがある場合に、そのマッピングをこの弱ハッシュマップから削除します。 |
int |
size()
マップ内のキー値マッピングの数を返します。 |
Collection<V> |
values()
このマップに含まれる値の Collection ビューを返します。 |
| クラス java.util.AbstractMap から継承されたメソッド |
|---|
clone, equals, hashCode, toString |
| クラス java.lang.Object から継承されたメソッド |
|---|
finalize, getClass, notify, notifyAll, wait, wait, wait |
| インタフェース java.util.Map から継承されたメソッド |
|---|
equals, hashCode |
| コンストラクタの詳細 |
|---|
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()
Map<K,V> 内の sizeAbstractMap<K,V> 内の sizepublic boolean isEmpty()
Map<K,V> 内の isEmptyAbstractMap<K,V> 内の isEmptypublic V get(Object key)
null を返します。
つまり、このメソッドは、(key==null ? k==null : key.equals(k)) となるキー k から値 v へのマッピングがこのマップに含まれている場合は v を返し、それ以外の場合は null を返します。このようなマッピングが 1 つだけあります。
戻り値の null は、マップがキーのマッピングを保持していないことを示すとはかぎりません。 つまり、マップが明示的にキーを null にマップすることもあります。containsKey オペレーションを使うと、この 2 つの場合を区別できます。
Map<K,V> 内の getAbstractMap<K,V> 内の getkey - 関連付けられた値が返されるキー
nullput(Object, Object)public boolean containsKey(Object key)
Map<K,V> 内の containsKeyAbstractMap<K,V> 内の containsKeykey - マップにあるかどうかが判定されるキー
public V put(K key,
V value)
Map<K,V> 内の putAbstractMap<K,V> 内の putkey - 指定の値が関連付けられるキーvalue - 指定のキーに関連付けられる値
public void putAll(Map<? extends K,? extends V> m)
Map<K,V> 内の putAllAbstractMap<K,V> 内の putAllm - マップに格納されるマッピング
NullPointerException - 指定されたマップが null の場合public V remove(Object key)
k==null ? k==null :key.equals(k)) という条件で、キー k から値 v までマッピングがマップに含まれる場合、このマッピングは削除されます。マップはこのようなマッピングを 1 つだけ含みます。
このマップが以前にこのキーを関連付けていた値を返します。キーに対するマッピングがマップになかった場合は null を返します。戻り値の null は、マップがキーのマッピングを保持していなかったことを示すとはかぎりません。つまり、マップが明示的にキーを null にマップした可能性もあります。
一度呼び出しが返れば、マップは指定されたキーのマッピングを含みません。
Map<K,V> 内の removeAbstractMap<K,V> 内の removekey - マッピングがマップから削除されるキー
public void clear()
Map<K,V> 内の clearAbstractMap<K,V> 内の clearpublic boolean containsValue(Object value)
Map<K,V> 内の containsValueAbstractMap<K,V> 内の containsValuevalue - マップにあるかどうかを判定される値
public Set<K> keySet()
Set ビューを返します。セットはマップと連動しているので、マップに対する変更はセットに反映され、また、セットに対する変更はマップに反映されます。セットの反復処理中にマップが変更された場合、反復処理の結果は定義されません (反復子自身の remove オペレーションを除く)。セットは要素の削除をサポートしており、対応するマッピングをマップから削除できます。削除は、Iterator.remove、Set.remove、removeAll、retainAll、および retainAll オペレーションを通して行います。Set は、add オペレーションや addAll オペレーションはサポートしていません。
Map<K,V> 内の keySetAbstractMap<K,V> 内の keySetpublic Collection<V> values()
Collection ビューを返します。コレクションはマップと連動しているので、マップに対する変更はコレクションに反映され、またコレクションに対する変更はマップに反映されます。コレクションの反復処理中にマップが変更された場合、反復処理の結果は定義されません (反復子自身の remove オペレーションを除く)。コレクションは要素の削除をサポートしており、対応するマッピングをマップから削除できます。 削除は、Iterator.remove、Collection.remove、removeAll、retainAll、および clear オペレーションを通して行います。コレクションは、add オペレーションや addAll オペレーションはサポートしていません。
Map<K,V> 内の valuesAbstractMap<K,V> 内の valuespublic Set<Map.Entry<K,V>> entrySet()
Set ビューを返します。セットはマップと連動しているので、マップに対する変更はセットに反映され、また、セットに対する変更はマップに反映されます。セットに対する反復の処理中にマップが変更された場合は、反復処理の結果は定義されません (反復子自身の remove オペレーション、または反復子により返されるマップエントリに対する setValue オペレーションを除く)。 セットは、要素の削除をサポートしており、対応するマッピングをマップから削除できます。セットは要素の削除をサポートしており、対応するマッピングをマップから削除できます。削除は、Iterator.remove、Set.remove、removeAll、retainAll、および clear の各オペレーションを通して行います。Set は、add オペレーションや addAll オペレーションはサポートしていません。
Map<K,V> 内の entrySetAbstractMap<K,V> 内の entrySet
|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。