中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java編程WeakHashMap的示例分析

發布時間:2021-08-11 10:47:26 來源:億速云 閱讀:124 作者:小新 欄目:編程語言

這篇文章主要介紹Java編程WeakHashMap的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

簡述:

WeakHashMap 用來保存WeakReference,這一結構云遜垃圾回收器自動清理鍵和值

在添加鍵和值的操作時,映射會自動使用WeakReference包裝它們,

見jdk源代碼,

public V put(K key, V value) {
	Object k = maskNull(key);
	int h = hash(k);
	Entry<K,V>[] tab = getTable();
	int i = indexFor(h, tab.length);
	for (Entry<K,V> e = tab[i]; e != null; e = e.next) {
		if (h == e.hash && eq(k, e.get())) {
			V oldValue = e.value;
			if (value != oldValue) 
			        e.value = value;
			return oldValue;
		}
	}
	modCount++;
	Entry<K,V> e = tab[i];
	tab[i] = new Entry<>(k, value, queue, h, e);
	if (++size >= threshold) 
	    resize(tab.length * 2);
	return null;
}

其中new Entry<>(k, value, queue, h, e)一行使用了ReferenceQueue

/** 
 * Reference queue for cleared WeakEntries 
 */ 
private final ReferenceQueue<Object> queue = new ReferenceQueue<>();

點入new Entry的構造函數,進入super頂層可以看到,

/** 
 * Creates a new weak reference that refers to the given object and is 
 * registered with the given queue. 
 * 
 * @param referent object the new weak reference will refer to 
 * @param q the queue with which the reference is to be registered, 
 *     or <tt>null</tt> if registration is not required 
 */ 
public WeakReference(T referent, ReferenceQueue<? super T> q) { 
  super(referent, q); 
}

這里new Entry同時也構造出來了一個WeakRefence對象

測試:

package com.anialy.test.data_structure.map;
import java.util.Iterator;
import java.util.WeakHashMap;
public class WeakHashMapTest {
	public static void main(String[] args) {
		WeakHashMap wmap = new WeakHashMap<String, Object>();
		final int SIZE = 10;
		String[] str = new String[SIZE];
		for (int i=0; i<SIZE; i++){
			String key = Integer.toString(i);
			String value = Integer.toString(i);
			// 每隔3個保留一個引用 
			if(i % 3 == 0) 
			        str[i] = key;
			wmap.put(key, value);
		}
		System.gc();
		Iterator iter = wmap.keySet().iterator();
		while(iter.hasNext()){
			System.out.println(wmap.get(iter.next()));
		}
	}
}

可以預料到,部分由于String[] 保留了弱引用,所以輸出都是間隔3的

Java編程WeakHashMap的示例分析

以上是“Java編程WeakHashMap的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

金堂县| 遂平县| 陆良县| 沙雅县| 顺平县| 凤城市| 永寿县| 广饶县| 原平市| 老河口市| 建昌县| 施甸县| 南乐县| 门头沟区| 荔浦县| 林西县| 钟山县| 永昌县| 汶上县| 张家界市| 子洲县| 大兴区| 新河县| 包头市| 永济市| 甘德县| 益阳市| 进贤县| 林西县| 台东市| 仪陇县| 胶南市| 文水县| 象州县| 金溪县| 阿拉善左旗| 原阳县| 白银市| 隆回县| 陇西县| 临沂市|