衆所周知,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. 爲什麼ConcurrentHashMap :: putIfAbsent比ConcurrentHashMap :: computeIfAbsent更快?
- 2. 什麼情況更好?
- 3. 在什麼情況下使用json_encode()比使用serialize()更好?
- 4. 在這種情況下哪個更好的ConcurrentHashMap或Synchronized Hash Map?
- 5. 在什麼情況下有狀態比網絡無狀態更好?
- 6. 在這種情況下,document.createElement或document.write有什麼更好?
- 7. 爲什麼在這種情況下枚舉比HashMap更有用?
- 8. 在什麼情況下,DocumentDB更好,更快?
- 9. 這種情況下最好的情況是什麼?
- 10. 在我的情況下,Lock + HasMap或ConcurrentHashMap?
- 11. Hashtable,ConcurrentHashMap和Data Visibility
- 12. 在哪種情況下LFU比LRU好?
- 13. 特殊情況下where子句的更好方法是什麼?
- 14. 在這種情況下使用什麼會更好? C#或PHP?
- 15. 爲什麼在REST更好的情況下使用rest api? NoSQL
- 16. 什麼是這種情況下更好的ActiveRecord查詢
- 17. 在什麼情況下CGI比Servlet更快?
- 18. 在什麼情況下VkFence比vkQueueWaitIdle更適合vkQueueSubmit?
- 19. 在什麼情況下Math.Round(...,MidpointRounding.AwayFromZero)比CInt更可取?
- 20. 在什麼情況下IE8的Javascript性能會比IE7更糟?
- 21. 在這種情況下 - 什麼更好有很多或有很多通過?
- 22. 在這種情況下使用發電機有什麼好處?
- 23. 在這種情況下有什麼更好的? ViewBag或TempData或Session?
- 24. 什麼情況下**會有用?
- 25. 有什麼用在這種情況下
- 26. 在哪些情況下使用定位會比浮動更好?
- 27. Java中的ConcurrentHashMap和Hashtable
- 28. 在什麼情況下使用運算符演變比混淆更有用?
- 29. 在什麼情況下可以做到 - 雖然比以前更有效率?
- 30. 有沒有setTimeout(..,0)比requestAnimationFrame()更好的情況?
你應該比較蘋果蘋果,這意味着'Collections.synchronizedMap(新的HashMap())'和'ConcurrentHashMap'。 'Hashtable'不過是遺留問題,自上次'Hashtable'被觸及以來''HashMap'有很多改進。 –