JavaTM 2 Platform
Std. Ed. v1.3

java.util
クラス WeakHashMap

java.lang.Object
  |
  +--java.util.AbstractMap
        |
        +--java.util.WeakHashMap
すべての実装インタフェース:
Map

public class WeakHashMap
extends AbstractMap
implements Map

ハッシュテーブルに基づいた「弱キー」による Map 実装です。WeakHashMap 内のエントリは、そのキーが普通に使われることがなくなると自動的に削除されます。より正確には、指定のキーのマッピングが存在しても、ガベージコレクタがキーを破棄するのを防ぐことはできません。つまり、キーがファイナライズ可能にされ、ファイナライズされてから、再生されるのを防ぐことはできません。キーが破棄された場合、そのエントリが事実上マップから削除されるので、このクラスはほかの Map 実装とは少し違った動作をします。

null 値と null キーはどちらともサポートされています。このクラスは HashMap クラスと同じようなパフォーマンス特性を持ち、初期容量と負荷係数の同じ効率パラメータを持ちます。

ほとんどのコレクションクラスと同じように、このクラスは同期化されていません。同期化されている WeakHashMapCollections.synchronizedMap メソッドを使って作成できます。

このクラスは、equals メソッドが == 演算子を使ってオブジェクト識別情報を判定するキーオブジェクトと一緒に使うことを主な目的としています。このようなキーが破棄されると二度と作り直されることはないので、それ以降に WeakHashMap 内のそのキーの検索を行なったり、そのエントリが削除されたことに不都合を感じても、対処する方法はありません。このクラスは、String インスタンスなどのオブジェクト識別情報に基づかない equals メソッドを持つキーオブジェクトを適切に処理します。ただし、作り直し可能なキーオブジェクトでは、キーが破棄された WeakHashMap エントリを自動削除すると、混乱をまねく可能性があります。

WeakHashMap クラスの動作の一部はガベージコレクタのアクションに依存するので、よく知られていても必要ではない、いくつかの Map インバリアントはこのクラスに適しません。ガベージコレクタはキーをいつでも破棄できるので、WeakHashMap は未知のスレッドがエントリを削除中であるかのように動作します。特に、WeakHashMap インスタンスで同期させ、その変異メソッドのどれも呼び出さないにしても、size メソッドはより小さな値を時間の経過とともに返すことができ、isEmpty メソッドは指定のキーに対して false を返してから true を返すことができます。containsKey メソッドは、true を返したあとで false を返すことができます。get メソッドは指定のキーには値を返したあとで null を返すことができ、put メソッドと remove メソッドは従来マップにあるように見えたキーに対してそれぞれ nullfalse を返すことができます。キーセット、値セット、エントリセットを続けて検査すれば連続的に出力する要素の数が少なくてすみます。

WeakHashMap 内の各キーオブジェクトは弱参照の対象として間接的に格納されています。このため、キーは、それに対する弱参照がマップの内外ともにガベージコレクタによってクリアされてからのみ自動的に削除されます。

実装上の注意: WeakHashMap 内の値オブジェクトは、通常の強参照によって保持されます。このため、値のオブジェクトが直接的にも間接的にも強くそれ自体のキーを参照しないようにしてください。そうすれば、キーが破棄されないようになります。値のオブジェクトが WeakHashMap 自体を介してそのキーを間接的に参照するようにしてください。つまり、値のオブジェクトはほかのキーオブジェクトを必ず参照し、その関連付けられている値のオブジェクトが今度は最初の値のオブジェクトのキーを必ず参照します。この問題については今後のリリースで対処する予定です。

導入されたバージョン:
1.2
関連項目:
HashMap, WeakReference

クラス java.util.Map から継承した内部クラス
Map.Entry
 
コンストラクタの概要
WeakHashMap()
          デフォルトの初期容量とデフォルトの負荷係数 (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 を返します。
 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
 
インタフェース java.util.Map から継承したメソッド
containsValue, equals, hashCode, keySet, putAll, values
 

コンストラクタの詳細

WeakHashMap

public WeakHashMap(int initialCapacity,
                   float loadFactor)
指定の初期容量と指定の負荷係数を持つ、新しい空の WeakHashMap を作成します。
パラメータ:
initialCapacity - WeakHashMap の初期容量
loadFactor - WeakHashMap の負荷係数
例外:
IllegalArgumentException - 初期容量が 0 より小さいか、負荷係数が正ではない場合

WeakHashMap

public WeakHashMap(int initialCapacity)
指定の初期容量とデフォルトの負荷係数 (0.75) を持つ、新しい空の WeakHashMap を作成します。
パラメータ:
initialCapacity - WeakHashMap の初期容量
例外:
IllegalArgumentException - 初期容量が 0 より小さい場合

WeakHashMap

public WeakHashMap()
デフォルトの初期容量とデフォルトの負荷係数 (0.75) を持つ、新しい空の WeakHashMap を作成します。

WeakHashMap

public WeakHashMap(Map t)
指定された Map と同じマッピングで新しい WeakHashMap を作成します。WeakHashMap は、指定されたマップにあるマッピング数の 2 倍の容量または 11 (どちらか大きい方)、およびデフォルトの負荷係数 (0.75) で作成されます。
パラメータ:
t - マッピングがこのマップに配置されるマップ
導入されたバージョン:
1.3
メソッドの詳細

size

public int size()
マップ内のキーと値のマッピングの数を返します。注: Map インタフェースのほとんどの実装とは対照的に、このオペレーションで必要な時間はマップのサイズに比例します。
定義:
インタフェース Map 内の size
オーバーライド:
クラス AbstractMap 内の size
インタフェース java.util.Map からコピーされたタグ:
戻り値:
マップ内のキーと値のマッピングの数

isEmpty

public boolean isEmpty()
マップがキーと値のマッピングを保持しない場合に true を返します。
定義:
インタフェース Map 内の isEmpty
オーバーライド:
クラス AbstractMap 内の isEmpty
インタフェース java.util.Map からコピーされたタグ:
戻り値:
マップがキーと値のマッピングを保持しない場合は true

containsKey

public boolean containsKey(Object key)
マップが指定のキーのマッピングを保持する場合に true を返します。
定義:
インタフェース Map 内の containsKey
オーバーライド:
クラス AbstractMap 内の containsKey
パラメータ:
key - マップにあるかどうかが判定されるキー

get

public Object get(Object key)
マップが指定の key をマッピングする値を返します。マップがこのキーの値を保持しない場合は、null を返します。
定義:
インタフェース Map 内の get
オーバーライド:
クラス AbstractMap 内の get
パラメータ:
key - 関連付けられている値があればそれが返されるキー

put

public Object put(Object key,
                  Object value)
マップを更新して、指定の key が指定の value にマッピングされるようにします。マップが以前に key のマッピングを保持していた場合、そのマッピングが置き換えられ、以前の値が返されます。
定義:
インタフェース Map 内の put
オーバーライド:
クラス AbstractMap 内の put
パラメータ:
key - 指定の value にマッピングされるキー
value - 指定の key がマッピングされる値
戻り値:
このキーがマッピングされていた以前の値。キーのマッピングがなかった場合は null

remove

public Object remove(Object key)
指定の key のマッピングがあればマップから削除します。
定義:
インタフェース Map 内の remove
オーバーライド:
クラス AbstractMap 内の remove
パラメータ:
key - マッピングが削除されるキー
戻り値:
このキーがマッピングされていた値。キーのマッピングがなかった場合は null

clear

public void clear()
すべてのマッピングをマップから削除します。
定義:
インタフェース Map 内の clear
オーバーライド:
クラス AbstractMap 内の clear
インタフェース java.util.Map からコピーされたタグ:
例外:
UnsupportedOperationException - clear がマップによってサポートされていない場合

entrySet

public Set entrySet()
マップ内のマッピングの Set ビューを返します。
定義:
インタフェース Map 内の entrySet
オーバーライド:
クラス AbstractMap 内の entrySet
インタフェース java.util.Map からコピーされたタグ:
戻り値:
マップ内に保持されているマッピングのセットビュー

JavaTM 2 Platform
Std. Ed. v1.3

バグや機能要求の報告
さらに詳しい API リファレンスおよび開発者ドキュメントについては、 Java 2 SDK SE Developer Documentation を参照してください。このドキュメントには、概念、用語の定義、回避策、 実用的なコード例など、開発者を対象にした詳細な解説が掲載されています。

Java、Java 2D、JDBC は、米国およびその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2000 Sun Microsystems, Inc. 901 San Antonio Road,
Palo Alto, California, 94303, U.S.A. All Rights Reserved.