HashMap 和 Hashtable的差別。本站提示廣大學習愛好者:(HashMap 和 Hashtable的差別)文章只能為提供參考,不一定能成為您想要的結果。以下是HashMap 和 Hashtable的差別正文
HashMap和Hashtable的比擬是Java面試中的罕見成績,用來考驗法式員能否可以或許准確應用聚集類和能否可以因時制宜應用多種思緒處理成績。HashMap的任務道理、ArrayList與Vector的比擬和這個成績是有關Java 聚集框架的最經典的成績。Hashtable是個過時的聚集類,存在於Java API中良久了。在Java 4中被重寫了,完成了Map接口,所以自此今後同樣成了Java聚集框架中的一部門。Hashtable和HashMap在Java面試中相當輕易被問到,乃至成了聚集框架面試題中最常被考的成績,所以在加入任何Java面試之前,都不要忘了預備這一題。
這篇文章中,我們不只將會看到HashMap和Hashtable的差別,還將看到它們之間的類似的地方。
HashMap和Hashtable的差別
HashMap和Hashtable都完成了Map接口,但決議用哪個之前先要弄清晰它們之間的分離。重要的差別有:線程平安性,同步(synchronization),和速度。
要留意的一些主要術語:
1) sychronized意味著在一次唯一一個線程可以或許更改Hashtable。就是說任何線程要更新Hashtable時要起首取得同步鎖,其它線程要比及同步鎖被釋放以後能力再次取得同步鎖更新Hashtable。
2) Fail-safe和iterator迭代器相干。假如某個聚集對象創立了Iterator或許ListIterator,然後其它的線程試圖“構造上”更改聚集對象,將會拋出ConcurrentModificationException異常。但其它線程可以經由過程set()辦法更改聚集對象是許可的,由於這並沒有從“構造上”更改聚集。然則假設曾經從構造長進行了更改,再挪用set()辦法,將會拋出IllegalArgumentException異常。
3) 構造上的更改指的是刪除或許拔出一個元素,如許會影響到map的構造。
我們可否讓HashMap同步?
HashMap可以經由過程上面的語句停止同步:
Map m = Collections.synchronizeMap(hashMap);
結論
Hashtable和HashMap有幾個重要的分歧:線程平安和速度。僅在你須要完整的線程平安的時刻應用Hashtable,而假如你應用Java 5或以上的話,請應用ConcurrentHashMap吧。
原文鏈接: Javarevisited 翻譯: ImportNew.com - 唐小娟
譯文鏈接: http://www.importnew.com/7010.html