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

          HashMap與Hashtable的區(qū)別

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

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

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

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

          以上只是表面的不同,它們的實現(xiàn)也有很大的不同。

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

          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);
          }
          以上只是一些比較突出的區(qū)別,當然他們的實現(xiàn)上還是有很多不同的,比如
          HashMap對null的操作

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


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 平湖市| 辉南县| 黑河市| 礼泉县| 开远市| 神木县| 康乐县| 内黄县| 泉州市| 电白县| 剑川县| 霞浦县| 石景山区| 双城市| 沙田区| 东兴市| 栾川县| 抚宁县| 雷州市| 太保市| 寿光市| 丹凤县| 南陵县| 广安市| 伊宁县| 阳信县| 那曲县| 玉门市| 白城市| 铅山县| 花莲市| 额济纳旗| 浠水县| 潍坊市| 溧水县| 永济市| 道真| 玛纳斯县| 黄大仙区| 栾川县| 永清县|