Java 教程

Java 控制語句

面向物件程式設計

Java 內建類

Java 檔案處理

Java 錯誤和異常

Java 多執行緒

Java 同步

Java 網路

Java 集合

Java 介面

Java 資料結構

Java 集合演算法

高階 Java

Java 雜項

Java API 和框架

Java 類參考

Java 有用資源

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)

此建構函式使用給定的初始容量和給定的載入因子構造一個新的空 WeakHashMap。

4

WeakHashMap(Map t)

此建構函式使用與指定 Map 相同的對映構造一個新的 WeakHashMap。

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

序號 方法和描述
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()

返回此對映中包含的鍵的集合檢視。

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() 的呼叫,則系統可能永遠不會執行垃圾收集器,因為程式使用的記憶體不多。對於更活躍的程式,此呼叫將是不必要的。

java_collections.htm
廣告
© . All rights reserved.