HashMap和Hashtable的比較是Java面試中的常見問題,用來考驗程序員是否可以正確使用集合類以及是否能夠隨機應變使用多種思路解決問題。HashMap的工做原理、ArrayList與Vector的比較以及這個問題是有關Java 集合框架的最經典的問題。Hashtable是個過期的集合類,存在於Java API中好久了。在Java 4中被重寫了,實現了Map接口,因此自此之後也成了Java集合框架中的一部分。Hashtable和HashMap在Java面試中至關容易被問到,甚至成爲了集合框架面試題中最常被考的問題,因此在參加任何Java面試以前,都不要忘了準備這一題。 程序員
這篇文章中,咱們不只將會看到HashMap和Hashtable的區別,還將看到它們之間的類似之處。 面試
HashMap和Hashtable都實現了Map接口,但決定用哪個以前先要弄清楚它們之間的分別。主要的區別有:線程安全性,同步(synchronization),以及速度。 安全
1) sychronized意味着在一次僅有一個線程可以更改Hashtable。就是說任何線程要更新Hashtable時要首先得到同步鎖,其它線程要等到同步鎖被釋放以後才能再次得到同步鎖更新Hashtable。 框架
2) Fail-safe和iterator迭代器相關。若是某個集合對象建立了Iterator或者ListIterator,而後其它的線程試圖「結構上」更改集合對象,將會拋出ConcurrentModificationException異常。但其它線程能夠經過set()方法更改集合對象是容許的,由於這並無從「結構上」更改集合。可是假如已經從結構上進行了更改,再調用set()方法,將會拋出IllegalArgumentException異常。 性能
3) 結構上的更改指的是刪除或者插入一個元素,這樣會影響到map的結構。 spa
HashMap能夠經過下面的語句進行同步:
Map m = Collections.synchronizeMap(hashMap); 線程
Hashtable和HashMap有幾個主要的不一樣:線程安全以及速度。僅在你須要徹底的線程安全的時候使用Hashtable,而若是你使用Java 5或以上的話,請使用ConcurrentHashMap吧。 對象