衆所周知,ConcurrentHashMap在性能上更好,但是我們可以有任何Hashtable更好的場景嗎?有什麼情況下hashtable比concurrenthashmap更好?
回答
在回答問題之前我會這樣說:千萬不要使用Hashtable
了。 Hashtable
是來自Java 1.0的遺留工具,在Java 2向前推出的高級集合框架之前。
如果您需要一個簡單的哈希映射,請使用HashMap
。如果您需要執行線程安全性,請使用ConcurrentHashMap
。如果您需要簡單的基本和不良線程安全性,請將HashMap
包裝到Collections.synchronizedMap(Map)
中。
我們其實回答這個問題的是,這純粹是比較兩個特定的類別沒有看到的可能性譜:
是的,這樣的情況存在
如果不需要線程安全的實現,建議使用HashMap來代替Hashtable。如果需要線程安全的高度並行實現,則建議使用ConcurrentHashMap代替Hashtable。
所以,是的,
Hashtable
你需要一個線程安全的實現,但沒有「慾望」一高併發實現適合的場景。這再次嚴格地在ConcurrentHashMap
和Hashtable
之間進行獨家比較。另外,如果你需要
Enumeration
[1],Hashtable
有直接的支持,而你必須要經過Collections.enumeration(...)
其他Map
秒。
Enumeration
1.也是一個Java類1.0。切換到Iterator
(如果使用Java 2〜7)或Stream
(如果使用Java 8+)
這是不完整的建議,因爲'synchronizedMap(new HashMap())'比'Hashtable'好。 –
在我看來,Hashtable已經過時了 –
- 1. 在什麼情況下使用json_encode()比使用serialize()更好?
- 2. 什麼情況更好?
- 3. 在這種情況下哪個更好的ConcurrentHashMap或Synchronized Hash Map?
- 4. 在什麼情況下有狀態比網絡無狀態更好?
- 5. 在什麼情況下,DocumentDB更好,更快?
- 6. 靜態分配在什麼情況下比動態分配更好?
- 7. 在哪種情況下LFU比LRU好?
- 8. 爲什麼在REST更好的情況下使用rest api? NoSQL
- 9. 在這種情況下使用什麼會更好? C#或PHP?
- 10. 在什麼情況下CGI比Servlet更快?
- 11. 在什麼情況下IE8的Javascript性能會比IE7更糟?
- 12. 在什麼情況下VkFence比vkQueueWaitIdle更適合vkQueueSubmit?
- 13. 在什麼情況下Math.Round(...,MidpointRounding.AwayFromZero)比CInt更可取?
- 14. 在這種情況下使用發電機有什麼好處?
- 15. 什麼情況下**會有用?
- 16. 在這種情況下有什麼更好的? ViewBag或TempData或Session?
- 17. 在哪些情況下使用定位會比浮動更好?
- 18. 在什麼情況下可以做到 - 雖然比以前更有效率?
- 19. 有沒有setTimeout(..,0)比requestAnimationFrame()更好的情況?
- 20. 哪種情況下性能更好
- 21. 有什麼比Django的flatpage更好嗎?
- 22. 什麼比邊框更好?
- 23. ConcurrentHashMap有什麼缺點嗎?
- 24. 這是什麼情況試圖比較?
- 25. 爲什麼NaN有用,在什麼情況下
- 26. 對於下列情況,最好的模式是什麼?
- 27. 什麼是以下情況的良好設計模式?
- 28. 這種情況下最好的數據結構是什麼?
- 29. 爲什麼在條件不好的情況下做事
- 30. 爲什麼在某些情況下輸出不好?
你應該比較蘋果蘋果,這意味着'Collections.synchronizedMap(新的HashMap())'和'ConcurrentHashMap'。 'Hashtable'不過是遺留問題,自上次'Hashtable'被觸及以來''HashMap'有很多改進。 –