Java-weakhashmap-class
Java-WeakHashMapクラス
WeakHashMapは、キーへの弱い参照のみを格納するMapインターフェイスの実装です。 弱い参照のみを保存すると、キーがWeakHashMapの外部で参照されなくなったときに、キーと値のペアをガベージコレクションできます。
このクラスは、弱い参照の力を利用する最も簡単な方法を提供します。 これは、「レジストリのような」データ構造を実装するのに役立ちます。この場合、エントリのユーティリティは、そのキーにスレッドが到達できなくなると消滅します。
WeakHashMapはHashMapとまったく同じように機能しますが、1つの非常に重要な例外があります。Javaメモリマネージャーがキーとして指定されたオブジェクトへの強力な参照を持たなくなると、マップのエントリが削除されます。
弱参照-オブジェクトへの参照が弱参照のみである場合、ガベージコレクターはいつでもオブジェクトのメモリを再利用できます。システムがメモリを使い果たすまで待つ必要はありません。 通常、ガベージコレクターが次に実行されるときに解放されます。
以下は、WeakHashMapクラスでサポートされるコンストラクターのリストです。
Sr.No. | Constructor & Description |
---|---|
1 |
WeakHashMap() このコンストラクターは、デフォルトの初期容量(16)とデフォルトの負荷係数(0.75)で新しい空のWeakHashMapを構築します。 |
2 |
WeakHashMap(int initialCapacity) このコンストラクターは、指定された初期容量とデフォルトの負荷係数(0.75)で新しい空のWeakHashMapを構築します。 |
3 |
WeakHashMap(int initialCapacity, float loadFactor) このコンストラクターは、指定された初期容量と指定された負荷係数で、新しい空のWeakHashMapを構築します。 |
4 |
WeakHashMap(Map t) このコンストラクターは、指定されたマップと同じマッピングで新しいWeakHashMapを構築します。 |
親クラスから継承されたメソッドとは別に、TreeMapは次のメソッドを定義します-
Sr.No. | Method & Description |
---|---|
1 |
void clear() このマップからすべてのマッピングを削除します。 |
2 |
boolean containsKey(Object key) このマップに指定されたキーのマッピングが含まれている場合、trueを返します。 |
3 |
boolean containsValue(Object value) このマップが1つ以上のキーを指定された値にマップする場合はtrueを返します。 |
4 |
Set entrySet() このマップに含まれるマッピングのコレクションビューを返します。 |
5 |
Object get(Object key) 指定したキーがこの弱いハッシュマップでマップされる値を返します。マップにこのキーのマッピングが含まれていない場合はnullを返します。 |
6 |
boolean isEmpty() このマップにキーと値のマッピングが含まれていない場合にtrueを返します。 |
7 |
Set keySet() このマップに含まれるキーのセットビューを返します。 |
8 |
Object put(Object key, Object value) このマップ内の指定されたキーに指定された値を関連付けます。 |
9 |
void putAll(Map m) 指定したマップからこのマップにすべてのマッピングをコピーします。 これらのマッピングは、指定されたマップに現在あるキーのいずれかに対してこのマップが持っていたマッピングを置き換えます。 |
10 |
Object remove(Object key) 存在する場合、このマップからこのキーのマッピングを削除します。 |
11 |
int size() このマップ内のキーと値のマッピングの数を返します。 |
12 |
Collection values() このマップに含まれる値のコレクションビューを返します。 |
例
次のプログラムは、このコレクションでサポートされているメソッドのいくつかを示しています-
import java.util.*;
public class WeakHashMap_Demo {
private static Map map;
public static void main (String args[]) {
map = new WeakHashMap();
map.put(new String("Maine"), "Augusta");
Runnable runner = new Runnable() {
public void run() {
while (map.containsKey("Maine")) {
try {
Thread.sleep(500);
} catch (InterruptedException ignored) {
}
System.out.println("Thread waiting");
System.gc();
}
}
};
Thread t = new Thread(runner);
t.start();
System.out.println("Main waiting");
try {
t.join();
} catch (InterruptedException ignored) {
}
}
}
これは、次の結果を生成します-
出力
Main waiting
Thread waiting
System.gc()への呼び出しを含めない場合、プログラムが使用するメモリが少ないため、システムはガベージコレクターを実行しない場合があります。 よりアクティブなプログラムの場合、呼び出しは不要です。