Terry.Li-彬

          虛其心,可解天下之問;專其心,可治天下之學;靜其心,可悟天下之理;恒其心,可成天下之業。

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks
          <2007年11月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          常用鏈接

          留言簿(19)

          隨筆分類(107)

          隨筆檔案(141)

          文章分類(284)

          文章檔案(342)

          相冊

          收藏夾(58)

          家裝

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          HashMap / HashTable / HashSet

          HashTable 與 HashMap:
           
                    表面:
                            HashTable不允許null(keyvalue都不可以),HashMap允許null(keyvalue都可以)
                    HashTable的方法是同步的,HashMap未經同步,所以在多線程場合要手動同步HashMap這個區別就像VectorArrayList一樣。
                    HashTable有一個contains(Object value),功能和containsValue(Object value)功能一樣。
                    HashTable使用EnumerationHashMap使用Iterator
             
                內部:
                    HashTablehash數組默認大小是11,增加的方式是 old*2+1HashMaphash數組的默認大小是16,而且一定是2的指數。
                   
                    哈希值的使用不同,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);
                          }

            HashSet 、 HashMap:

                     HashMap可以看作三個視圖:keySetvalueCollectionEntrySet這里HashSet就是其實就是HashMap的一個視圖。HashSet內部就是使用Hashmap實現的,和Hashmap不同的是它不需要KeyValue兩個值。
                  

                  往hashset中插入對象其實只不過是內部做了

                        public boolean add(Object o) {

                              return map.put(o, PRESENT)==null;
                       
          }

                  往hashset中插入對象其實只不過是內部做了

                        public boolean add(Object o) {

                              return map.put(o, PRESENT)==null;
                       
          }

                      
               HashMap為散列映射,它是基于hash table的一個實現,它可在常量時間內安插元素,或找出一組key-value pair.

               HashSet為散列集,它把查找時間看的很重要,其中所有元素必須要有hashCode()


          posted on 2007-11-24 15:07 禮物 閱讀(4919) 評論(2)  編輯  收藏

          評論

          # re: HashMap 、HashTable、HashSet的區別 2008-09-17 22:30 地方
          我是外行 看不懂  回復  更多評論
            

          # re: HashMap 、HashTable、HashSet的區別 [未登錄] 2010-06-03 10:51
          還是應該帶著問題去思考比較好。因為人之間總有共性,能夠思考同樣的事情.雖然有的觀察不到,但是事物之間確實有聯系。

          對于性能不僅與數量還和質量 戰略 運氣有關 運氣其實是沒有考慮人為因素的帶來的隨機性  回復  更多評論
            


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

          網站導航:
           
          主站蜘蛛池模板: 周至县| 平顶山市| 化德县| 鞍山市| 韩城市| 南宁市| 峨眉山市| 芷江| 廉江市| 浙江省| 叙永县| 大田县| 甘德县| 蓬莱市| 囊谦县| 玛纳斯县| 井冈山市| 天全县| 明溪县| 内黄县| 昌邑市| 嘉兴市| 建平县| 耒阳市| 沁阳市| 沛县| 温州市| 健康| 台东县| 河东区| 曲麻莱县| 扶沟县| 阳山县| 屯留县| 镇康县| 邹城市| 淳安县| 沈丘县| 绵竹市| 时尚| 馆陶县|