這問題是面試官經(jīng)忱敢考到的問題之一,一般來說將下面幾點(diǎn)背給面試官聽就可以了
答:二者都實(shí)現(xiàn)了Map接口,是將惟一鍵映射到特定的值上;主要區(qū)別在于:
1)HashMap沒有排序,允許一個null鍵和多個null值,而Hashtable不允許;
2)HashMap把Hashtable的contains方法去掉了饱亿,改成containsvalue和containsKey,因?yàn)閏ontains方法容易讓人引起誤解蚜退;
3)Hashtable繼承自Dictionary類 闰靴,HashMap是Java1.2引進(jìn)的Map接口的實(shí)現(xiàn) ;
4)Hashtable的方法是Synchronize的钻注,而HashMap不是蚂且,在多個線程訪問
Hashtable時,不需要自己為它的方法實(shí)現(xiàn)同步幅恋,而HashMap就必須為之提供外同步杏死。
5)Hashtable和HashMap采用的hash/rehash算法大致一樣,所以性能不會有很大的差異捆交。
我們親自去看一下,加深印象
首先我用到的工具是
eclipse (主要是為了看源碼)
JDK_API_1_6_zh_CN.CHM (JavaSE中文版的文檔)
<h5>#1 二者都實(shí)現(xiàn)了Map接口淑翼,是將惟一鍵映射到特定的值上</h5>
從JDK_API這個文檔,可以看到它們兩個的接口都是Map
<h5>#2 Hashtable繼承自Dictionary類 ,HashMap是Java1.2引進(jìn)的Map接口的實(shí)現(xiàn) </h5>
看JDK_API文檔
<h5>#3 HashMap沒有排序品追,允許一個null鍵和多個null值,而Hashtable不允許</h5>
如果想要看到這個最好還是看一下JDK_API的介紹,這個是入門最方便的手段
這段話,可以得出三個知識點(diǎn):
1.HashMap是非同步的,也就說某些方法沒有用synchronized 修飾
HashTable 是同步的,也就說某些方法用synchronized 修飾
注意:是某些方法,不是全部方法(可以用過看文檔,也可以通過eclipse,建議eclipse,清晰)
所以在多個線程訪問Hashtable時玄括,不需要自己為它的方法實(shí)現(xiàn)同步,而HashMap就必須為之提供外同步肉瓦。
2.HashMap允許一個或多個key為null,Hashtable 是不可以的
3.HashMap不保證映射的順序,這個是根據(jù)算法來決定的
<h5>#4 Hashtable和HashMap采用的hash/rehash算法大致一樣遭京,所以性能不會有很大的差異.</h5>
有興趣的,可以去看一下數(shù)據(jù)結(jié)構(gòu)相關(guān)的書本,這里就不演示了