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
相關用法
- Java WeakHashMap putAll()用法及代碼示例
- Java WeakHashMap clear()用法及代碼示例
- Java WeakHashMap containsKey()用法及代碼示例
- Java WeakHashMap putall()用法及代碼示例
- Java WeakHashMap size()用法及代碼示例
- Java WeakHashMap containsValue()用法及代碼示例
- Java WeakHashMap entrySet()用法及代碼示例
- Java WeakHashMap get()用法及代碼示例
- Java WeakHashMap isEmpty()用法及代碼示例
- Java WeakHashMap keySet()用法及代碼示例
- Java WeakHashMap put()用法及代碼示例
- Java WeakHashMap remove()用法及代碼示例
- Java WeakHashMap values()用法及代碼示例
- Java WeekFields dayOfWeek()用法及代碼示例
- Java WeekFields equals()用法及代碼示例
- Java WeekFields getFirstDayOfWeek()用法及代碼示例
- Java WeekFields getMinimalDaysInFirstWeek()用法及代碼示例
- Java WeekFields hashCode()用法及代碼示例
- Java WeekFields of()用法及代碼示例
- Java WeekFields toString()用法及代碼示例
- Java WeekFields weekBasedYear()用法及代碼示例
- Java WeekFields weekOfMonth()用法及代碼示例
- Java WeekFields weekOfWeekBasedYear()用法及代碼示例
- Java WeekFields weekOfYear()用法及代碼示例
- Java Writer hashCode()用法及代碼示例
注:本文由純淨天空篩選整理自佚名大神的英文原創作品 WeakHashMap Class in Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。