posts - 431,  comments - 344,  trackbacks - 0
          今天看別人寫的代碼, 其中使用了兩種Map子類, IdentityHashMap和WeakHashMap, 經(jīng)查看JDK文檔得知:
          IdentityHashMap
          此類利用哈希表實現(xiàn) Map 接口,比較鍵(和值)時使用引用相等性代替對象相等性。換句話說,在 IdentityHashMap 中,當(dāng)且僅當(dāng) (k1==k2) 時,才認(rèn)為兩個鍵 k1k2 相等(在正常 Map 實現(xiàn)(如 HashMap)中,當(dāng)且僅當(dāng)滿足下列條件時才認(rèn)為兩個鍵 k1k2 相等:(k1==null ? k2==null : e1.equals(e2)))。
          也就是說, 如果Key是同一個對象才算是鍵相等, 如果只是值相等, 那么不算相等.
          比如
            Map<Pet, String> map = new IdentityHashMap<Pet, String>();
            Pet p = new Pet("eric");
            map.put(new Pet("eric"), "eric");
            map.put(new Pet("eric"), "hello");
            System.out.println("size = " + map.size());
            
            Map<Pet, String> hashMap = new HashMap<Pet, String>();
            hashMap.put(new Pet("eric"), "eric");
            hashMap.put(new Pet("eric"), "hello");
            System.out.println("hashMap size = " + hashMap.size());
          Pet中的equals中只要name相等, 就算這兩個pet對象相等. 執(zhí)行結(jié)果為:
          size = 2
          hashMap size = 1

          WeakHashMap
          弱鍵 實現(xiàn)的基于哈希表的 Map。在 WeakHashMap 中,當(dāng)某個鍵不再正常使用時,將自動移除其條目。更精確地說,對于一個給定的鍵,其映射的存在并不阻止垃圾回收器對該鍵的丟棄,這就使該鍵成為可終止的,被終止,然后被回收。丟棄某個鍵時,其條目從映射中有效地移除,因此,該類的行為與其他的 Map 實現(xiàn)有所不同。
          其實就是除了本map引用以外, 沒有其他對象引用該key對象, 則WeakHashMap會自動移除這個key以及對應(yīng)的值.
          posted on 2009-05-15 16:54 周銳 閱讀(1503) 評論(5)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 永泰县| 花莲市| 镇康县| 蓬溪县| 广昌县| 扎鲁特旗| 专栏| 宝清县| 泸定县| 长治县| 凤山县| 晋中市| 广汉市| 盐津县| 宣威市| 宽城| 遂宁市| 夹江县| 义马市| 嘉祥县| 太谷县| 巴塘县| 余江县| 林芝县| 祥云县| 平舆县| 讷河市| 宁波市| 涞水县| 桂平市| 翁牛特旗| 天门市| 阿拉善盟| 沂水县| 纳雍县| 青铜峡市| 宁安市| 灵山县| 马山县| 营山县| 永顺县|