Java之集合(十四)Hashtable

來源:互聯網
上載者:User

標籤:之一   節點   情境   src   介面   最佳化   處理   cti   鏈表   

  轉載請註明源出處:http://www.cnblogs.com/lighten/p/7426522.html

1.前言

  HashTable這個類很奇特,其繼承了Dictionary這個沒有任何具體實作類別,而後實現了Map介面。Dictionary對大部分人而言都十分陌生,因為這個類並沒有什麼用,其出現在JDK1.0,而Map介面最早出現在JDK1.2。這個應該是JDK自己的類體系進行了調整,使得Dictionary類沒有什麼價值。在HashMap中我就提到過HashTable,這兩個類最大的區別就是HashTable是安全執行緒的,且HashTable不允許空的索引值。實際上現在使用HashTable的可能性比較低了,其表現不如HashMap,安全執行緒也可以選擇效能更高的ConcurrentHashMap。不過還是對其進行簡單的介紹,實現也是比HashMap簡單多了。

2.Hashtable

  Hashtable擁有和HashMap相似的結構,這裡不進行過多描述。threshold就是表需要擴容的閾值,loadFactor就是用來計算這個閾值的載入因子,其乘上表的大小就是閾值了。一般為0.75f,意味著hash表的3/4有資料就進行擴容。

  上面是一般的建構函式,預設大小11,載入因子0.75f。

  get方法就可以看出,其對null沒有進行處理。插入hash表也是一般的方法,計算hash值,先做與操作保證hash值為正數,再取餘保證落在hash表上。之後就是hash桶的鏈表遍曆了,找到對應的值。

  put方法限制了存入空值。插入也是一樣的,先計算出落在hash表上的位置,再尋找其原來存在與否,存在就替換舊值,返回。不存在就添加。

  添加的過程先判斷是否達到擴容的閾值,到了就擴容。重新計算鍵的hash值和在hash表上的位置。之後就將其放在鏈表表頭。這個過程和WeakHashMap是類似的。

  remove方法一樣,找到Hash表上的位置,遍曆找到該值,將前面的節點和後面的節點連起來就可以了。

  其它的方法不進行介紹了,較為簡單。

3.後記

  HashTable是最早的類之一,目前使用的情境不大,索引值不為null可以自己判斷,至於安全執行緒也可以被Collections.synchronizedMap(HashMap)或者效率更高的ConcurrentHashMap取代。所以該類不推薦使用,畢竟HashMap和ConcurrentHashMap進行了大量的最佳化。

Java之集合(十四)Hashtable

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.