我在面試中碰到過這個問題、HashMap和HashTable的區別、自己查找過相關資料、也問過技術大牛、總結出以下幾點:
HashMap繼承AbstractMap,它是HashTable的輕量級實現,是非線程安全的,執行效率較高一些,允許Entry的Key或value爲null,沒有contains方法;
HashTable繼承Dictionary,是線程安全的,執行效率低,不允許Entry的key或value爲null,否則會出現異常NullPointerException,有contains方法。
需要注意的是:
Hashtale是Syncchronize的,而HashMap是Asyncchronize的,當多個線程訪問Hashtable時,Hashtable不需要自己爲它的方法實現同步;而當多個線程訪問HashMap時,需要通過Collections.synchronizedMap來同步HashMap。