妳看看百度,會發現網上壹般的說法都和“由於Java發展的歷史原因”有關。Hashtable基於過時的Dictionary類,HashMap是Java 1.2引入的Map接口的實現。“壹樣。
這種說法沒有錯,但是不夠準確,尤其是對於我們這種大眾菜鳥。如果不深究,可能會造成壹些認識上的差異。簡單的認為Hashtable沒有繼承Map接口。
我們可以參考JDK1.6的最新源代碼來看看這兩個類的定義:
公共類哈希表& ltk,V & gt擴展字典& ltk,V & gt實現映射& ltk,V & gt,Cloneable,java.io.Serializable {…}
公共類HashMap & ltk,V & gt擴展AbstractMap & ltk,V & gt實現映射& ltk,V & gt,可克隆,可序列化{…}
可以看到hashtable也繼承了Map接口。
它們的區別在於Hashtable(從JDK1.0開始)繼承了抽象類字典。
HashMap(從JDK1.2開始)繼承了AbstractMap類。
第二個區別我們來說說他們在同步和並發方面的區別。
可以通過這兩個類的源代碼來分析。Hashtable中的主要方法是同步的,但是HashMap不是。
可以說Hashtable默認支持同步,HashMap默認不支持。
我們可以在多線程並發環境下直接使用Hashtable,但是如果要使用HashMap,就要自己添加同步。
HashMap的同步處理可以使用Collections類提供的synchronizedMap靜態方法;
或者直接使用JDK5.0之後提供的java.util.concurrent包中的ConcurrentHashMap類。