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

          HashMap與Hashtable的區別

          Posted on 2006-09-30 21:44 xyang 閱讀(920) 評論(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的操作

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


          網站導航:
           
          主站蜘蛛池模板: 怀集县| 海原县| 洛扎县| 贡觉县| 望城县| 通山县| 马龙县| 义马市| 富裕县| 离岛区| 天全县| 渝中区| 新野县| 怀安县| 陆良县| 鄂伦春自治旗| 盐边县| 海盐县| 收藏| 大冶市| 建瓯市| 日喀则市| 祁门县| 布拖县| 囊谦县| 山西省| 明光市| 宁陵县| 蒙山县| 综艺| 桃园市| 德钦县| 库尔勒市| 白山市| 高淳县| 杨浦区| 古交市| 巴马| 思南县| 屏南县| 环江|