「Javaの思考」第4版P519ページ弱hhashmap章読書メモ
weakhashmapは、Yunxun Garbage Collectorと呼ばれる構造である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&&ee = 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> = shreshold)resize(tab.length * 2); return null;} new Entry<>(k, value, queue, h, e) ReferenceQueueを使用します
/ ** *クリアされた弱点のリファレンスキュー */プライベート最終参照<オブジェクト> queue = new referenceQueue <>();
new Entryのコンストラクターをクリックして、スーパーのトップレベルを入力して確認します。
/** *指定されたオブジェクトを参照し、指定されたキューに登録されている新しい弱い参照を作成します。 * * @param Referenceオブジェクト新しい弱い参照は * @param q参照が登録されるキューを参照します。 }
ここでは、 new EntryもWeakRefenceオブジェクトを構築します
テスト:
パッケージ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 []; final int = 10; i = 0; i ++){string key = integer(i); //参照を保持しますif(i%3 == 0)str [i] = key; wmap.keyset()。iterator(); while(iter.hasnext()){system.out.println(wmap.get(iter.next());}}}}}}}部分的には、string []が弱い参照を保持するため、出力はすべて間隔3であることが予想されます。
上記は、JavaプログラミングのWeakHashmapインスタンスの分析に関するこの記事のすべての内容です。誰にとっても役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!