當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Java WeakHashMap用法及代碼示例


WeakHashMap是Map接口的實現。 WeakHashMap 幾乎與 HashMap 相同,但在 WeakHashMap 的情況下,如果對象被指定為鍵不包含任何引用,則即使它與 WeakHashMap 關聯,它也有資格進行垃圾回收。即垃圾Collector支配 WeakHashMap。

WeakHashMap 是 Map 接口的基於哈希表的實現,具有弱鍵。當 WeakHashMap 中的條目不再正常使用時,該條目將自動刪除。更準確地說,給定鍵的映射的存在不會阻止該鍵被垃圾Collector丟棄,即使其可最終化、最終確定,然後回收。當一個鍵被丟棄時,它的條目實際上會從映射中刪除,因此此類的行為與其他 Map 實現有些不同。

WeakHashMap 類的一些重要函數包括:

  • WeakHashMap 中支持空值和空鍵。
  • 它不同步。
  • 此類主要用於關鍵對象,其 equals 方法使用 == 運算符測試對象標識。

Constructors in WeakHashMap

1. WeakHashMap():該構造函數用於創建一個空的WeakHashMap,默認初始容量為(16),負載係數為(0.75)。

2. WeakHashMap(int initialCapacity):該構造函數用於創建一個具有給定初始容量和默認負載因子(0.75)的空WeakHashMap。

3. WeakHashMap(int initialCapacity, float loadFactor):該構造函數用於創建一個具有給定初始容量和給定負載因子的空WeakHashMap。

4. WeakHashMap(Map m):該構造函數用於創建一個與指定映射具有相同映射關係的新WeakHashMap。

Methods in WeakHashMap

方法 執行的操作
WeakHashMap clear() 從此Map中刪除所有映射。此調用返回後,Map將為空。
WeakHashMap containsValue() 如果此映射將一個或多個鍵映射到指定值,則返回 true。
WeakHashMap containsKey() 如果此映射包含指定鍵的映射,則返回 true。
WeakHashMap entrySet() 返回此映射中包含的映射的集合視圖。該集合由Map支持,因此對Map的更改會反映在集合中,反之亦然。如果在集合上的迭代正在進行時修改映射(除非通過迭代器自己的刪除操作,或通過迭代器返回的映射條目上的 setValue 操作),則迭代的結果是未定義的。該集合支持元素刪除,即通過 Iterator.remove、Set.remove、removeAll、retainAll 和clear 操作從映射中刪除相應的映射。它不支持add或addAll操作。
WeakHashMap get() 返回指定鍵映射到的值,如果此映射不包含該鍵的映射,則返回 null。
WeakHashMap isEmpty() 如果此映射不包含鍵值映射,則返回 true。此結果是快照,可能不會反映未處理的條目,這些條目將在下次嘗試訪問之前刪除,因為它們不再被引用。
WeakHashMap keySet() 返回此映射中包含的鍵的集合視圖。該集合由Map支持,因此對Map的更改會反映在集合中,反之亦然。如果在對集合進行迭代時修改映射(除非通過迭代器自己的刪除操作),則迭代的結果是不確定的。該集合支持元素刪除,即通過 Iterator.remove、Set.remove、removeAll、retainAll 和clear 操作從映射中刪除相應的映射。它不支持add或addAll操作。
WeakHashMap put() 將指定值與此映射中的指定鍵相關聯。如果映射之前包含此鍵的映射,則舊值將被替換。
WeakHashMap putall() 將指定映射中的所有映射複製到此映射。這些映射將替換該映射對當前位於指定映射中的任何鍵的任何映射。
WeakHashMap remove() 從此弱哈希映射中刪除鍵的映射(如果存在)。更正式地說,如果此映射包含從鍵 k 到值 v 的映射(key==null ? k==null: key.equals(k)),則刪除該映射。
WeakHashMap size() 返回此映射中鍵值映射的數量。此結果是快照,可能不會反映未處理的條目,這些條目將在下一次嘗試訪問之前被刪除,因為它們不再被引用。
WeakHashMap values() 返回此映射中包含的值的集合視圖。該集合由Map支持,因此對Map的更改會反映在集合中,反之亦然。如果在對集合進行迭代時修改映射(除非通過迭代器自己的刪除操作),則迭代的結果是不確定的。該集合支持元素刪除,即通過 Iterator.remove、Collection.remove、removeAll、retainAll 和clear 操作從映射中刪除相應的映射。它不支持add或addAll操作。

示例 1:

Java


// Java Program to Illustrate WeakHashMap class 
// Via close(), containsValue(), containsKey() 
// and isEmpty() method 
  
// Importing required classes 
import java.util.Map; 
import java.util.WeakHashMap; 
  
// Main class 
// WeakHashMapdemo 
class GFG { 
  
    // Main driver method 
    public static void main(String[] arg) 
    { 
  
        // Creating an empty WeakHashMap 
        // of Number and string type 
        Map<Number, String> weak 
            = new WeakHashMap<Number, String>(); 
  
        // Inserting custom elements 
        // using put() method 
        weak.put(1, "geeks"); 
        weak.put(2, "for"); 
        weak.put(3, "geeks"); 
  
        // Printing and alongside checking weak map 
        System.out.println("our weak map: " + weak); 
  
        // Checking if "for" exist 
        if (weak.containsValue("for")) 
            System.out.println("for exist"); 
  
        // Checking if 1 exist as a key in Map 
        if (weak.containsKey(1)) 
            System.out.println("1 exist"); 
  
        // Removing all data 
        // using clear() method 
        weak.clear(); 
  
        // Checking whether the Map is empty or not 
        // using isEmpty() method 
        if (weak.isEmpty()) 
  
            // Display message for better readability 
            System.out.println("empty map: " + weak); 
    } 
}
輸出
our weak map: {3=geeks, 2=for, 1=geeks}
for exist
1 exist
empty map: {}

示例 2:

Java


// Java Program to Illustrate WeakHashMap class 
// Via entrySet(), keySet() and Values() Method 
  
// Importing required classes 
import java.util.Collection; 
import java.util.Map; 
import java.util.Set; 
import java.util.WeakHashMap; 
  
// Main class 
// WeakHashMapdemo 
class GFG { 
  
    // Main driver method 
    public static void main(String[] arg) 
    { 
  
        // Creating an empty WeakHashMap 
        // of number and string type 
        Map<Number, String> weak 
            = new WeakHashMap<Number, String>(); 
  
        // Inserting elements 
        // using put() method 
        weak.put(1, "geeks"); 
        weak.put(2, "for"); 
        weak.put(3, "geeks"); 
  
        // Creating object of Set interface 
        Set set1 = weak.entrySet(); 
  
        // Checking above Set 
        System.out.println(set1); 
  
        // Creating set for key 
        Set keySet = weak.keySet(); 
  
        // Checking keySet 
        System.out.println("key set: " + keySet); 
  
        Collection value = weak.values(); 
  
        // Checking values of map and printing them 
        System.out.println("values: " + value); 
    } 
}
輸出
[3=geeks, 2=for, 1=geeks]
key set: [3, 2, 1]
values: [geeks, for, geeks]

示例 3:

Java


// Java code remove(), putAll() 
// get() and size() method 
  
import java.util.Collection; 
import java.util.Map; 
import java.util.Set; 
import java.util.WeakHashMap; 
  
class WeakHashMapdemo { 
    public static void main(String[] arg) 
    { 
        Map<Number, String> weak 
            = new WeakHashMap<Number, String>(); 
        weak.put(1, "geeks"); 
        weak.put(2, "for"); 
        weak.put(3, "geeks"); 
  
        Map<Number, String> weak1 
            = new WeakHashMap<Number, String>(); 
        weak1.putAll(weak); 
  
        // Getting value of key 2 
        System.out.println(weak1.get(2)); 
  
        // Printing the size of map 
        // using size() method 
        System.out.println("Size of map is: "
                           + weak1.size()); 
  
        // Removing second element 
        // using standard remove() method 
        weak1.remove(2); 
  
        // Printing the size after removing key and value 
        // pair 
        System.out.println("Size after removing: "
                           + weak1.size()); 
    } 
}
輸出
for
Size of map is: 3
Size after removing: 2


相關用法


注:本文由純淨天空篩選整理自佚名大神的英文原創作品 WeakHashMap Class in Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。