程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> HashMap 和 Hashtable的差別

HashMap 和 Hashtable的差別

編輯:關於JAVA

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. HashMap簡直可以等價於Hashtable,除HashMap長短synchronized的,並可以接收null(HashMap可以接收為null的鍵值(key)和值(value),而Hashtable則不可)。
  2. HashMap長短synchronized,而Hashtable是synchronized,這意味著Hashtable是線程平安的,多個線程可以同享一個Hashtable;而假如沒有准確的同步的話,多個線程是不克不及同享HashMap的。Java 5供給了ConcurrentHashMap,它是HashTable的替換,比HashTable的擴大性更好。
  3. 另外一個差別是HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以當有其它線程轉變了HashMap的構造(增長或許移除元素),將會拋出ConcurrentModificationException,但迭代器自己的remove()辦法移除元素則不會拋出ConcurrentModificationException異常。但這其實不是一個必定產生的行動,要看JVM。這條異樣也是Enumeration和Iterator的差別。
  4. 因為Hashtable是線程平安的也是synchronized,所以在單線程情況下它比HashMap要慢。假如你不須要同步,只須要單一線程,那末應用HashMap機能要好過Hashtable。
  5. HashMap不克不及包管跟著時光的推移Map中的元素順序是不變的。
  6. 要留意的一些主要術語:

    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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved