|
Java プラットフォーム 1.2 |
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 内部クラス | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
java.lang.Object
|
+--java.util.AbstractMap
|
+--java.util.WeakHashMap
ハッシュテーブルに基づいた、「弱キー」による 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 自体を介してそのキーを間接的に参照するようにしてください。つまり、値のオブジェクトはほかのキーオブジェクトを強制的に参照し、その関連付けられている値のオブジェクトが今度は最初の値のオブジェクトのキーを強制的に参照します。この問題については今後のリリースで対処する予定です。
HashMap,
WeakReference| コンストラクタの概要 | |
WeakHashMap()
デフォルトの容量とデフォルトの負荷係数 ( 0.75) を持つ、新しい空の WeakHashMap を作成します。 |
|
WeakHashMap(int initialCapacity)
指定の初期容量とデフォルトの負荷係数 ( 0.75) を持つ、新しい空の WeakHashMap を作成します。 |
|
WeakHashMap(int initialCapacity,
float loadFactor)
指定の初期容量と指定の負荷係数を持つ、新しい空の WeakHashMap を作成します。 |
|
| メソッドの概要 | |
void |
clear()
すべてのマッピングをマップから削除します。 |
boolean |
containsKey(Object key)
マップが指定のキーのマッピングを保持する場合に true を返します。 |
Set |
entrySet()
マップ内のマッピングの Set ビューを返します。 |
Object |
get(Object key)
マップが指定の key をマッピングする値を返します。 |
boolean |
isEmpty()
マップがキー値マッピングを保持しない場合に true を返します。 |
Object |
put(Object key,
Object value)
マップを更新して、指定の key が指定の value にマッピングされるようにします。 |
Object |
remove(Object key)
指定の key のマッピングがあればマップから削除します。 |
int |
size()
マップ内のキー値マッピングの数を返します。 |
| クラス java.util.AbstractMap から継承したメソッド |
containsValue,
equals,
hashCode,
keySet,
putAll,
toString,
values |
| クラス java.lang.Object から継承したメソッド |
clone,
finalize,
getClass,
notify,
notifyAll,
wait,
wait,
wait |
| コンストラクタの詳細 |
public WeakHashMap(int initialCapacity,
float loadFactor)
WeakHashMap を作成します。initialCapacity - WeakHashMap の初期容量loadFactor - WeakHashMap の負荷係数public WeakHashMap(int initialCapacity)
0.75) を持つ、新しい空の WeakHashMap を作成します。initialCapacity - WeakHashMap の初期容量public WeakHashMap()
0.75) を持つ、新しい空の WeakHashMap を作成します。| メソッドの詳細 |
public int size()
Map インタフェースのほとんどの実装とは対照的に、このオペレーションで必要な時間はマップのサイズに対応します。public boolean isEmpty()
true を返します。public boolean containsKey(Object key)
true を返します。key - マップ内にあるかどうかが判定されるキーpublic Object get(Object key)
key をマッピングする値を返します。マップがこのキーの値を保持しない場合は、null を返します。key - 関連付けられている値があればそれが返されるキー
public Object put(Object key,
Object value)
key が指定の value にマッピングされるようにします。マップが以前に key のマッピングを保持していた場合、そのマッピングが置き換えられ、以前の値が返されます。key - 指定の value にマッピングされるキーvalue - 指定の key がマッピングされる値nullpublic Object remove(Object key)
key のマッピングがあればマップから削除します。key - マッピングが削除されるキーnullpublic void clear()
public Set entrySet()
Set ビューを返します。
|
Java プラットフォーム 1.2 |
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 内部クラス | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||