1.Hashtable是線程安全,HashMap是非線程安全
HashMap的性能會高於Hashtable,咱們平時使用時若無特殊需求建議使用HashMap,在多線程環境下若使用HashMap須要使用Collections.synchronizedMap()方法來獲取一個線程安全的集合(Collections.synchronizedMap()實現原理是Collections定義了一個SynchronizedMap的內部類,這個類實現了Map接口,在調用方法時使用synchronized來保證線程同步數組
2.HashMap能夠使用null做爲key,不過建議仍是儘可能避免這樣使用。HashMap以null做爲key時,老是存儲在table數組的第一個節點上。而Hashtable則不容許null做爲key安全
3.HashMap繼承了AbstractMap,HashTable繼承Dictionary抽象類,二者均實現Map接口多線程
4.HashMap的初始容量爲16,Hashtable初始容量爲11,二者的填充因子默認都是0.75性能
5.HashMap擴容時是當前容量翻倍即:capacity2,Hashtable擴容時是容量翻倍+1即:capacity2+1線程
6.HashMap和Hashtable的底層實現都是數組+鏈表結構實現code
7.二者計算hash的方法不一樣:
Hashtable計算hash是直接使用key的hashcode對table數組的長度直接進行取模
HashMap計算hash對key的hashcode進行了二次hash,以得到更好的散列值,而後對table數組長度取摸繼承