posts - 2, comments - 1, trackbacks - 0, articles - 0

          HashMap,HashTable,TreeMap區(qū)別和用法

          Posted on 2011-08-10 15:58 Angel's Kiss 閱讀(6013) 評論(1)  編輯  收藏 所屬分類: Java基礎(chǔ)篇
           

               開始學(xué)HashTable,HashMap和TreeMap的時候比較暈,覺得作用差不多,但是到實(shí)際運(yùn)用的時候又發(fā)現(xiàn)有許多差別的。需要大家注意,在實(shí)際開發(fā)中以需求而定。

                   java為數(shù)據(jù)結(jié)構(gòu)中的映射定義了一個接口java.util.Map,而HashMap Hashtable和TreeMap就是它的實(shí)現(xiàn)類。Map是將鍵映射到值的對象,一個映射不能包含重復(fù)的鍵;每個鍵最多只能映射一個一個值。

                    Hashmap 是一個最常用的Map,它根據(jù)鍵的HashCode 值存儲數(shù)據(jù),根據(jù)鍵可以直接獲取它的值,具有很快的訪問速度。HashMap最多只允許一條記錄的鍵為Null;允許多條記錄的值為Null;HashMap不支持線程的同步,即任一時刻可以有多個線程同時寫HashMap;可能會導(dǎo)致數(shù)據(jù)的不一致。如果需要同步,可以用Collections的synchronizedMap方法使HashMap具有同步的能力.

                    Hashtable 與 HashMap類似,但是主要有6點(diǎn)不同。

                   1.HashTable的方法是同步的,HashMap未經(jīng)同步,所以在多線程場合要手動同步HashMap這個區(qū)別就像Vector和ArrayList一樣。   

                  2.HashTable不允許null值,key和value都不可以,HashMap允許null值,key和value都可以。HashMap允許key值只能由一個null值,因?yàn)閔ashmap如果key值相同,新的key, value將替代舊的。   

                  3.HashTable有一個contains(Object value)功能和containsValue(Object value)功能一樣。   

                  4.HashTable使用Enumeration,HashMap使用Iterator。   

                  5.HashTable中hash數(shù)組默認(rèn)大小是11,增加的方式是 old*2+1。HashMap中hash數(shù)組的默認(rèn)大小是16,而且一定是2的指數(shù)。   

                  6.哈希值的使用不同,HashTable直接使用對象的hashCode。

                  TreeMap能夠把它保存的記錄根據(jù)鍵排序,默認(rèn)是按升序排序,也可以指定排序的比較器,當(dāng)用Iterator 遍歷TreeMap時,得到的記錄是排過序的。

                  下面是HashTable,HashMap和TreeMap總結(jié)的一個經(jīng)典例子。

          package com.taobao.luxiaoting;

          import java.util.Map;   

          import java.util.HashMap;   

          import java.util.Set;   

          import java.util.HashSet;   

          import java.util.Iterator;   

          import java.util.Hashtable;   

          import java.util.TreeMap;   

          class  HashMaps   

          {   

                 public static void main(String[] args)    

                {   

                      Map map=new HashMap();               

                      map.put(“a”, “aaa”);   

                      map.put(“b”, “bbb”);   

                      map.put(“c”, “ccc”);   

                      map.put(“d”, “ddd”);   

                        

                      Iterator iterator = map.keySet().iterator();               

                      while (iterator.hasNext()) {   

                       Object key = iterator.next();   

                       System.out.println(“map.get(key) is :”+map.get(key));   

                      }         

                                         

                      Hashtable tab=new Hashtable();               

                      tab.put(“a”, “aaa”);   

                      tab.put(“b”, “bbb”);   

                      tab.put(“c”, “ccc”);   

                      tab.put(“d”, “ddd”);   

                      Iterator iterator_1 = tab.keySet().iterator();   

                      while (iterator_1.hasNext()) {   

                       Object key = iterator_1.next();   

                       System.out.println(“tab.get(key) is :”+tab.get(key));   

                      }            

                         

                      TreeMap tmp=new TreeMap();               

                      tmp.put(“a”, “aaa”);   

                      tmp.put(“b”, “bbb”);   

                      tmp.put(“c”, “ccc”);   

                      tmp.put(“d”, “ddd”);   

                      Iterator iterator_2 = tmp.keySet().iterator();   

                      while (iterator_2.hasNext()) {   

                       Object key = iterator_2.next();   

                       System.out.println(“tmp.get(key) is :”+tmp.get(key));   

                      }            

                  }   

              }   

          輸出結(jié)果如下圖所示

          Feedback

          # re: HashMap,HashTable,TreeMap區(qū)別和用法  回復(fù)  更多評論   

          2012-09-05 11:00 by 打個
          對規(guī)范地方蝴蝶飛過

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 荥阳市| 桐梓县| 芒康县| 新疆| 资溪县| 辽宁省| 竹北市| 金堂县| 旬阳县| 东光县| 龙泉市| 临湘市| 新田县| 资中县| 镇雄县| 玉林市| 晋州市| 海原县| 佛学| 襄垣县| 彰化市| 增城市| 麻城市| 东丰县| 右玉县| 花垣县| 东平县| 盈江县| 华安县| 台中市| 信阳市| 军事| 慈溪市| 镇远县| 朝阳市| 平阴县| 石门县| 牟定县| 若尔盖县| 玛多县| 车致|