|
JavaTM 2 Platform Std. Ed. v1.4.0 |
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
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 自体を介してそのキーを間接的に参照するようにしてください。つまり、値のオブジェクトはほかのキーオブジェクトを必ず参照し、その関連付けられている値のオブジェクトが今度は最初の値のオブジェクトのキーを必ず参照します。この問題に対応する 1 つの方法は、値自体を m.put(key, new WeakReference(value)) のように、挿入前に WeakReferences にラップし、次に各 get でラップ解除することです。
このクラスのすべての「コレクションビューメソッド」によって返される反復子は、「フェイルファスト」です。反復子の作成後に、反復子自体の remove メソッドまたは add メソッド以外の方法でマップを構造的に変更すると、反復子は ConcurrentModificationException をスローします。したがって、同時変更が行われると、反復子は、将来の予測できない時点において予測できない動作が発生する危険を回避するために、直ちにかつ手際よく例外をスローします。
通常、非同期の同時変更がある場合、確かな保証を行うことは不可能なので、反復子のフェイルファストの動作を保証することはできません。フェイルファスト反復子は最善努力原則に基づき、ConcurrentModificationException をスローします。したがって、正確を期すためにこの例外に依存するプログラムを書くことは誤りです。「反復子のフェイルファストの動作はバグを検出するためにのみ使用すべきです」
HashMap
,
WeakReference
入れ子クラスの概要 |
クラス java.util.Map から継承した入れ子クラス |
Map.Entry |
コンストラクタの概要 | |
WeakHashMap()
デフォルトの初期容量 (16) とデフォルトの負荷係数 (0.75) を持つ、新しい空の WeakHashMap を作成します。 |
|
WeakHashMap(int initialCapacity)
指定の初期容量とデフォルトの負荷係数 (0.75) を持つ、新しい空の WeakHashMap を作成します。 |
|
WeakHashMap(int initialCapacity,
float loadFactor)
指定の初期容量と指定の負荷係数を持つ、新しい空の WeakHashMap を作成します。 |
|
WeakHashMap(Map t)
指定された Map と同じマッピングを持つ新規の WeakHashMap を作成します。 |
メソッドの概要 | |
void |
clear()
すべてのマッピングをマップから削除します。 |
boolean |
containsKey(Object key)
マップが指定のキーのマッピングを保持する場合に true を返します。 |
boolean |
containsValue(Object value)
マップが 1 つまたは複数のキーと指定された値をマッピングしている場合に true を返します。 |
Set |
entrySet()
マップに格納されているマッピングのコレクションビューを返します。 |
Object |
get(Object key)
この弱ハッシュマップで指定されたキーにマップされている値を返します。 |
boolean |
isEmpty()
このマップがキーと値のマッピングを保持しない場合は true を返します。 |
Set |
keySet()
マップに格納されているキーのセットビューを返します。 |
Object |
put(Object key,
Object value)
指定の値と指定されたキーをこのマップに関連付けます。 |
void |
putAll(Map t)
指定のマップからすべてのマッピングをマップにコピーします。 |
Object |
remove(Object key)
キーに対するマッピングがあれば、そのキーをマップから削除します。 |
int |
size()
このマップのキーと値のマッピングの数を返します。 |
Collection |
values()
マップに格納されている値のコレクションビューを返します。 |
クラス 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 t)
t
- マッピングがこのマップに配置されるマップ
NullPointerException
- 指定されたマップが null である場合メソッドの詳細 |
public int size()
Map
内の size
AbstractMap
内の size
public boolean isEmpty()
Map
内の isEmpty
AbstractMap
内の isEmpty
public Object get(Object key)
Map
内の get
AbstractMap
内の get
key
- 関連付けられた値が返されるキー
put(Object, Object)
public boolean containsKey(Object key)
Map
内の containsKey
AbstractMap
内の containsKey
key
- マップにあるかどうかが判定されるキー
public Object put(Object key, Object value)
Map
内の put
AbstractMap
内の put
key
- 指定される値が関連付けられるキーvalue
- 指定されるキーに関連付けられる値
public void putAll(Map t)
Map
内の putAll
AbstractMap
内の putAll
t
- マップに格納されるマッピング
NullPointerException
- 指定されたマップが null である場合public Object remove(Object key)
Map
内の remove
AbstractMap
内の remove
key
- マッピングがマップから削除されるキー
public void clear()
Map
内の clear
AbstractMap
内の clear
public boolean containsValue(Object value)
Map
内の containsValue
AbstractMap
内の containsValue
value
- マップにあるかどうかを判定される値
public Set keySet()
Map
内の keySet
AbstractMap
内の keySet
public Collection values()
Map
内の values
AbstractMap
内の values
public Set entrySet()
Map
内の entrySet
AbstractMap
内の entrySet
Map.Entry
|
JavaTM 2 Platform Std. Ed. v1.4.0 |
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Java、Java 2D、および JDBC は米国ならびにその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.