hashMap和hashTable的區別

每日總結,天天進步一點點

hashMap和hashTable的區別

  1.父類:hashMap=》AbstractMapjava

      hashTable=》Dictionary安全

  2.性能:hashMap:線程不安全,非同步,效率高jvm

      hashTable:線程安全,同步,效率低性能

  3.存儲特性:hashMap:key能夠有一個爲null,值能夠有多個爲空spa

        hashTable:key和value都不能爲null線程

 

補充知識WeakHashMap,IdentityHashMap,EnumMap

  WeakHashMap:

    在說這個類以前,首先普及一下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

    前兩條數據已經被回收,最後一條爲強類型,不會進行回收

    

  IdentityHashMap

    這個類的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

    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接口下的實現類,都是鍵值對結構的集合,他們的存放數據和獲取數據的方法都是同樣的,在這裏不作詳細的介紹,

  但願以上總結對你們有幫助,若是喜歡就支持一下吧,若是有錯誤請大神賜教。

相關文章
相關標籤/搜索