2016-09-28 75 views
2

衆所周知,ConcurrentHashMap在性能上更好,但是我們可以有任何Hashtable更好的場景嗎?有什麼情況下hashtable比concurrenthashmap更好?

+1

你應該比較蘋果蘋果,這意味着'Collections.synchronizedMap(新的HashMap())'和'ConcurrentHashMap'。 'Hashtable'不過是遺留問題,自上次'Hashtable'被觸及以來''HashMap'有很多改進。 –

回答

0

在回答問題之前我會這樣說:千萬不要使用HashtableHashtable是來自Java 1.0的遺留工具,在Java 2向前推出的高級集合框架之前。

如果您需要一個簡單的哈希映射,請使用HashMap。如果您需要執行線程安全性,請使用ConcurrentHashMap。如果您需要簡單的基本和不良線程安全性,請將HashMap包裝到Collections.synchronizedMap(Map)中。

我們其實回答這個問題的是,這純粹是比較兩個特定的類別沒有看到的可能性譜:

是的,這樣的情況存在

Hashtable documentation

如果不需要線程安全的實現,建議使用HashMap來代替Hashtable。如果需要線程安全的高度並行實現,則建議使用ConcurrentHashMap代替Hashtable。

  1. 所以,是的,Hashtable你需要一個線程安全的實現,但沒有「慾望」一高併發實現適合的場景。這再次嚴格地在ConcurrentHashMapHashtable之間進行獨家比較。

  2. 另外,如果你需要Enumeration[1]Hashtable有直接的支持,而你必須要經過Collections.enumeration(...)其他Map秒。


Enumeration 1.也是一個Java類1.0。切換到Iterator(如果使用Java 2〜7)或Stream(如果使用Java 8+)

+1

這是不完整的建議,因爲'synchronizedMap(new HashMap())'比'Hashtable'好。 –

+0

在我看來,Hashtable已經過時了 –

相關問題