1.父類:hashMap=》AbstractMapjava
hashTable=》Dictionary安全
2.性能:hashMap:線程不安全,非同步,效率高jvm
hashTable:線程安全,同步,效率低性能
3.存儲特性:hashMap:key能夠有一個爲null,值能夠有多個爲空spa
hashTable:key和value都不能爲null線程
在說這個類以前,首先普及一下java的引用類型code
java中引用類型分爲四種:對象
1.強引用:引用指向對象,垃圾回收器(gc)不會進行回收blog
2.軟引用:運時可能被回收(jvm內存不足)接口
3.弱引用:運行時必定被回收
4.虛引用:相似於無引用,主要用於跟蹤對象的回收狀態
接下來我們繼續看WeakHashMap這個類
WeakHashMap這個類的key鍵值爲弱引用,垃圾回收器運行時將被回收,主要用於大量數據在使用結束以後須要及時進行內存回收處理
事例代碼:
WeakHashMap< String, String> weakMap = new WeakHashMap<String, String>(); weakMap.put(new String("a1"), "abc"); weakMap.put(new String("a2"), "def"); weakMap.put("a3", "ghi"); //垃圾回收器運行 System.gc(); System.runFinalization(); //輸出集合的長度 System.out.println(weakMap.size());
運行結果爲:1
前兩條數據已經被回收,最後一條爲強類型,不會進行回收
這個類的key值存放的是對象的引用,不是對象的值
事例代碼:
IdentityHashMap<String, String> map = new IdentityHashMap<String, String>(); map.put("a1", "aaa"); map.put(new String("a1"), "bbb"); map.put(new String("a1"), "ccc"); System.out.println(map.size());
運行結果:3,此時的三條數據的key值是不重複的
EnumMap:這個類的key值是一個枚舉類型
事例代碼:
EnumMap<demo, String> enum1 = new EnumMap<demo, String>(demo.class); enum1.put(demo.a1, "a1"); enum1.put(demo.a2,"a2"); System.out.println(enum1.size()); for (Map.Entry<demo, String> map1 : enum1.entrySet()) { System.out.println(map1.getKey()+" " + map1.getValue()); }
//建立一個枚舉類型 enum demo{ a1,a2,a3,a4; }
以上全部的類都是Map接口下的實現類,都是鍵值對結構的集合,他們的存放數據和獲取數據的方法都是同樣的,在這裏不作詳細的介紹,
但願以上總結對你們有幫助,若是喜歡就支持一下吧,若是有錯誤請大神賜教。