posts - 19, comments - 1, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          HashMap與Hashtable的區別

          Posted on 2006-09-30 21:44 xyang 閱讀(927) 評論(0)  編輯  收藏
          HashTable的應用非常廣泛,HashMap是新框架中用來代替HashTable的類,也就是說建議使用HashMap,不要使用HashTable。可能你覺得HashTable很好用,為什么不用呢?這里簡單分析他們的區別。?
          1.HashTable的方法是同步的,HashMap未經同步,所以在多線程場合要手動同步HashMap這個區別就像Vector和ArrayList一樣。

          2.HashTable不允許null值(key和value都不可以),HashMap允許null值(key和value都可以)。

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

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

          以上只是表面的不同,它們的實現也有很大的不同。

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

          6.哈希值的使用不同,HashTable直接使用對象的hashCode,代碼是這樣的:
          int?hash?=?key.hashCode();
          int?index?=?(hash?&?0x7FFFFFFF)?%?tab.length;
          而HashMap重新計算hash值,而且用與代替求模:
          int?hash?=?hash(k);
          int?i?=?indexFor(hash,?table.length);

          static?int?hash(Object?x)?{
            int?h?=?x.hashCode();

            h?+=?~(h?<<?9);
            h?^=?(h?>>>?14);
            h?+=?(h?<<?4);
            h?^=?(h?>>>?10);
            return?h;
          }
          static?int?indexFor(int?h,?int?length)?{
            return?h?&?(length-1);
          }
          以上只是一些比較突出的區別,當然他們的實現上還是有很多不同的,比如
          HashMap對null的操作

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


          網站導航:
           
          主站蜘蛛池模板: 夏邑县| 郁南县| 桑植县| 米脂县| 汉川市| 平利县| 阿合奇县| 临桂县| 嘉鱼县| 旺苍县| 忻城县| 合作市| 伊通| 曲麻莱县| 霍州市| 江华| 毕节市| 仪陇县| 阳东县| 兖州市| 嘉鱼县| 石狮市| 库伦旗| 金塔县| 惠东县| 克什克腾旗| 高平市| 甘泉县| 松溪县| 隆昌县| 新乡县| 宜良县| 陈巴尔虎旗| 广州市| 汉阴县| 扎兰屯市| 临澧县| 饶平县| 庄浪县| 碌曲县| 西和县|