Java學習

          java,spring,structs,hibernate,jsf,ireport,jfreechart,jasperreport,tomcat,jboss -----本博客已經搬家了,新的地址是 http://www.javaly.cn 如果有對文章有任何疑問或者有任何不懂的地方,歡迎到www.javaly.cn (Java樂園)指出,我會盡力幫助解決。一起進步

           

          HashMap和Hashtable的區別 以及Hashmap的用法

          Hashtable和HashMap類有三個重要的不同之處。第一個不同主要是歷史原因。Hashtable是基于陳舊的Dictionary類的,HashMap是Java 1.2引進的Map接口的一個實現。

          也許最重要的不同是Hashtable的方法是同步的,而HashMap的方法不是。這就意味著,雖然你可以不用采取任何特殊的行為就可以在一個多線程 的應用程序中用一個Hashtable,但你必須同樣地為一個HashMap提供外同步。一個方便的方法就是利用Collections類的靜態的 synchronizedMap()方法,它創建一個線程安全的Map對象,并把它作為一個封裝的對象來返回。這個對象的方法可以讓你同步訪問潛在的 HashMap。這么做的結果就是當你不需要同步時,你不能切斷Hashtable中的同步(比如在一個單線程的應用程序中),而且同步增加了很多處理費 用。

          第三點不同是,只有HashMap可以讓你將空值作為一個表的條目的key或value。HashMap中只有一條記 錄可以是一個空的key,但任意數量的條目可以是空的value。這就是說,如果在表中沒有發現搜索鍵,或者如果發現了搜索鍵,但它是一個空的值,那么 get()將返回null。如果有必要,用containKey()方法來區別這兩種情況。

          一些資料建議,當需要同步時, 用Hashtable,反之用HashMap。但是,因為在需要時,HashMap可以被同步,HashMap的功能比Hashtable的功能更多,而 且它不是基于一個陳舊的類的,所以有人認為,在各種情況下,HashMap都優先于Hashtable。

          關于Properties
          有時侯,你可能想用一個hashtable來映射key的字符串到value的字符串。DOS、Windows和Unix中的環境字符串就有一些例子, 如key的字符串PATH被映射到value的字符串C:\WINDOWS;C:\WINDOWS\SYSTEM。Hashtables是表示這些的一個 簡單的方法,但Java提供了另外一種方法。

          Java.util.Properties類是Hashtable的一個子類,設計用于String keys和values。Properties對象的用法同Hashtable的用法相象,但是類增加了兩個節省時間的方法,你應該知道。

          Store()方法把一個Properties對象的內容以一種可讀的形式保存到一個文件中。Load()方法正好相反,用來讀取文件,并設定Properties對象來包含keys和values。

          注意,因為Properties擴展了Hashtable,你可以用超類的put()方法來添加不是String對象的keys和values。這是不 可取的。另外,如果你將store()用于一個不包含String對象的Properties對象,store()將失敗。作為put()和get()的 替代,你應該用setProperty()和getProperty(),它們用String參數。
           

          package com.neusoft.edu.dcp.uim;

          import java.util.HashMap;
          import java.util.Hashtable;
          import java.util.Iterator;
          import java.util.LinkedHashMap;
          import java.util.Map;
          import java.util.TreeMap;

          public class HashMapDemo {
          //初始化
          private void init(Map map,String kind)
          {
             if(map != null)
             {
              for(int i=1; i<6; i++)
              {
               map.put(String.valueOf(i),kind+i);
              }
             }
          }

          //結果輸出
          private void outPut(Map map)
          {
             if(map != null)
             {
              Object key    = null;
              Object value = null;
              Iterator iterater = map.keySet().iterator();
              while(iterater.hasNext())
              {
               key = iterater.next();
               value = map.get(key);
               System.out.print(key+": "+value+"\t");
              }
              System.out.println("\n");
             }
          }
          public static void main(String args[])
          {
              HashMap hashmap = new HashMap();
              hashmap.put("x", "1");
              hashmap.put("u", "2");
              hashmap.put("z", "3");
              hashmap.put("h", "4");
              hashmap.put("a", "5");
              hashmap.put("o", "6");
              hashmap.put("g", "7");
              hashmap.put("u", "8");
              hashmap.put("a", "9");
              hashmap.put("n", "10");
              hashmap.put("g", "11");
            
               Object key    = null;
               Object value = null;
               Iterator iterater = hashmap.keySet().iterator();
               while(iterater.hasNext())
               {
                key = iterater.next();
                value = hashmap.get(key);
                System.out.print(key+": "+value+"\t");
               }
               System.out.println("\n");
            
          }
          //聲明HashMap對象
          private void setHashMap()
          {
             HashMap hashMap = new HashMap();
             init(hashMap,"HashMap");
             hashMap.put(null,"鍵值為空");
             hashMap.put("值為空",null);
             System.out.println("這是HashMap對象的鍵與值:");
             outPut(hashMap);
          }
               //聲明Hashtable對象
          private void setHashtable(){
             Hashtable hashtable = new Hashtable();
             init(hashtable,"Hashtable");
             //hashtable.put(null,"鍵值為空"); Hashtable不允許鍵或值為null;
             //hashtable.put("值為空",null);
             System.out.println("這是Hashtable對象的鍵與值:");
             outPut(hashtable);
          }
               //聲明LinkedHashMap對象
          private void setLinkedHashMap(){
             LinkedHashMap linkedHashMap = new LinkedHashMap();
             init(linkedHashMap,"LinkedHashMap");
             linkedHashMap.put(null,"鍵值為空");
             linkedHashMap.put("值為空",null);
             System.out.println("這是LinkedHashMap對象的鍵與值:");
             outPut(linkedHashMap);
          }
               //聲明TreeMap對象
          private void setTreeMap(){
             TreeMap treeMap = new TreeMap();
             //TreeMap treeMap = new TreeMap(new MySort());//按自定義的方式排序
             init(treeMap,"TreeMap");
             treeMap.put("0", "后插入的值");
             //treeMap.put(null,"鍵值為空"); TreeMap不允許鍵或值為null
             //treeMap.put("值為空",null);
             System.out.println("這是TreeMap對象的鍵與值:");
             outPut(treeMap);
          }
          // public static void main(String[] args){
          //   HashMapDemo tm = new HashMapDemo();
          //   tm.setHashMap();
          //   tm.setHashtable();
          //   tm.setLinkedHashMap();
          //   tm.setTreeMap();
          //  
          //   Map hashMap = new HashMap();
          //   hashMap.put(null, "鍵值為null");
          //   hashMap.put("值為null", null);
          //   System.out.println("新建HashMap對象元素的記錄數是:"+hashMap.size());  
          //   hashMap.remove(null);
          //   System.out.println("刪除鍵值為null的HashMap對象元素的記錄數是:"+hashMap.size());  
          // }
          }

          posted on 2008-11-08 14:52 找個美女做老婆 閱讀(2166) 評論(0)  編輯  收藏


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


          網站導航:
           

          導航

          統計

          公告

          本blog已經搬到新家了, 新家:www.javaly.cn
           http://www.javaly.cn

          常用鏈接

          留言簿(6)

          隨筆檔案

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 嘉禾县| 阿城市| 丰镇市| 潞城市| 永清县| 四子王旗| 平舆县| 台湾省| 辽阳县| 武穴市| 吉首市| 西华县| 原阳县| 濮阳市| 金寨县| 新安县| 福鼎市| 建德市| 民丰县| 陵水| 神木县| 靖远县| 六安市| 东至县| 嵊州市| 康马县| 泸溪县| 通河县| 米易县| 福安市| 黔西县| 牡丹江市| 玉龙| 滁州市| 赫章县| 青铜峡市| 遂平县| 年辖:市辖区| 醴陵市| 当雄县| 长治县|