天天看點

java weakhashmap_Java WeakHashMap類

WeakHashMap類是Map接口的一個實作,它隻存儲對鍵的弱引用。僅存儲弱引用允許在鍵不再在WeakHashMap之外引用時對鍵值對進行垃圾收集。

此類提供了利用弱引用功能的最簡單方法。它對于實作“類似系統資料庫”的資料結構很有用,其中當任何線程不再可以通路鍵時,項目的實用程式就會消失。

WeakHashMap的功能與HashMap相同,但有一個非常重要的特性:如果Java記憶體管理器不再具有對指定為鍵的對象的強引用,則将删除映射中的條目。

弱引用 - 如果對象的唯一引用是弱引用,則垃圾回收器可以随時回收對象的記憶體。它不必等到系統記憶體不足。通常,它将在下次垃圾收集器運作時釋放。

以下是WeakHashMap類支援的構造函數清單。

編号

構造函數

描述

1

WeakHashMap()

此構造函數使用預設初始容量(16)和預設加載因子(0.75)構造一個新的空WeakHashMap。

2

WeakHashMap(int initialCapacity)

此構造函數使用給定的初始容量和預設加載因子(0.75)構造一個新的空WeakHashMap。

3

WeakHashMap(int initialCapacity, float loadFactor)

4

WeakHashMap(Map t)

此構造函數構造一個新的WeakHashMap,其映射與指定的Map相同。

除了從父類繼承的方法之外,WeakHashMap還定義了以下方法 -

編号

方法

描述

1

void clear()

從此映射中删除所有映射。

2

boolean containsKey(Object key)

如果此映射包含指定鍵的映射,則傳回true。

3

boolean containsValue(Object value)

如果此映射将一個或多個鍵映射到指定值,則傳回true。

4

Set entrySet()

傳回此映射中包含的映射的集合視圖。

5

Object get(Object key)

傳回指定鍵在此辨別哈希映射中映射到的值,如果映射不包含此鍵的映射,則傳回null。

6

boolean isEmpty()

如果此映射不包含鍵-值映射,則傳回true。

7

Set keySet()

傳回此映射中包含的鍵的set視圖。

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 WeakHashMapDemo {

private static Map map;

public static void main(String args[]) {

map = new WeakHashMap();

map.put(new String("Yiibai.com"), "Kaops.com");

Runnable runner = new Runnable() {

public void run() {

while (map.containsKey("Yiibai.com")) {

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()的調用,系統可能永遠不會運作垃圾收集器,因為程式使用的記憶體不多。對于更活躍的程式,調用是不必要的。

¥ 我要打賞

糾錯/補充

收藏

加QQ群啦,易百教程官方技術學習群

注意:建議每個人選自己的技術方向加群,同一個QQ最多限加 3 個群。