AJPFX總結hashmap和hashtable的區別

Hashtable和HashMap類有三個重要的不一樣之處。第一個不一樣主要是歷史緣由。Hashtable是基於陳舊的Dictionary類的,HashMap是Java 1.2引進的Map接口的一個實現。
  
  也許最重要的不一樣是Hashtable的方法是同步的,而HashMap的方法不是。這就意味着,雖然你能夠不用採起任何特殊的行爲就能夠在一個多線程的應用程序中用一個Hashtable,但你必須一樣地爲一個HashMap提供外同步。一個方便的方法就是利用Collections類的靜態的synchronizedMap()方法,它建立一個線程安全的Map對象,並把它做爲一個封裝的對象來返回。這個對象的方法可讓你同步訪問潛在的HashMap。這麼作的結果就是當你不須要同步時,你不能切斷Hashtable中的同步(好比在一個單線程的應用程序中),並且同步增長了不少處理費用。
  
  第三點不一樣是,只有HashMap可讓你將空值做爲一個表的條目的key或value。HashMap中只有一條記錄能夠是一個空的key,但任意數量的條目能夠是空的value。這就是說,若是在表中沒有發現搜索鍵,或者若是發現了搜索鍵,但它是一個空的值,那麼get()將返回null。若是有必要,用containKey()方法來區別這兩種狀況。
  
  一些資料建議,當須要同步時,用Hashtable,反之用HashMap。可是,由於在須要時,HashMap能夠被同步,HashMap的功能比Hashtable的功能更多,並且它不是基於一個陳舊的類的,因此有人認爲,在各類狀況下,HashMap都優先於Hashtable安全

相關文章
相關標籤/搜索