亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java7 WeakHashMap isEmpty() 似乎有誤

Java7 WeakHashMap isEmpty() 似乎有誤

Cats萌萌 2022-09-07 21:11:39
我試圖使用Java7的WeakHashMap,我發現它的isEmpty()方法給了我錯誤的結果。import java.util.Map;import java.util.WeakHashMap;public class Test{    public static void main(final String[] args)    {        final Map<String, Boolean> map = new WeakHashMap<>();        String b = new String("B");        map.put(b, true);        b = null;        System.gc();        System.out.println(map.isEmpty());        System.out.println(map.keySet().isEmpty());        System.out.println(map);    }}實際結果:假真{}也就是說,map.isEmpty() 和 map.keySet().isEmpty() 不一致。有人能幫我理解它嗎?多謝。
查看完整描述

2 回答

?
HUH函數

TA貢獻1836條經驗 獲得超4個贊

你應該閱讀 WeakHashMap 的 javadoc:

該類的行為部分取決于垃圾回收器的操作,因此幾個熟悉的(盡管不是必需的)不變量不適用于此類。由于垃圾回收器可能隨時丟棄密鑰,因此 a 的行為可能就像未知線程正在靜默刪除條目一樣。特別是,即使您在實例上進行同步并且不調用其賦值函數方法,size 方法也可能隨著時間的推移返回較小的值,isEmpty 方法返回 false 然后返回 true對于返回該方法,稍后對于給定鍵,對于該方法返回給定鍵的值,但稍后返回 , 用于返回的方法和返回以前似乎在映射中的鍵的方法,以及連續檢查鍵集、值集合和條目集以生成連續較少數量的元素。WeakHashMapMapWeakHashMapWeakHashMapcontainsKeytruefalsegetnullputnullremovefalse

簡而言之,你所看到的效果是完全有效的。


查看完整回答
反對 回復 2022-09-07
?
慕的地8271018

TA貢獻1796條經驗 獲得超4個贊

WeakHashMap::isEmpty 說:


...此結果是快照,可能不會反映未處理的條目,這些條目將在下次嘗試訪問之前刪除,因為它們不再被引用。


因此,您會期望 在 GC 之后和訪問之后返回正確的值。此代碼演示了以下內容:isEmpty()


public class Scratch1 {

    public static void main(final String[] args) {

        final Map<String, Boolean> map = new WeakHashMap<>();


        String b = new String("B");

        map.put(b, true);

        b = null;


        System.gc();


        // map not internally accessed at this point

        System.out.println(map.isEmpty());


        // let's access the Map's internals (and hopefully coerce

        // it into removing no-longer-referenced keys)

        System.out.println(map.keySet()

                              .isEmpty());


        // map HAS now been accessed

        System.out.println(map.isEmpty());

    }


}

收益 率:


false

true

true


查看完整回答
反對 回復 2022-09-07
  • 2 回答
  • 0 關注
  • 109 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號