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的底層實現都是數組+鏈表結構實現
7.兩者計算hash的方法不同:
Hashtable計算hash是直接使用key的hashcode對table數組的長度直接進行取模
HashMap計算hash對key的hashcode進行了二次hash,以獲得更好的散列值,然后對table數組長度取摸
