2010-08-31 75 views
3

我想將一個ConcurrentHashMap轉換爲TreeMap.Can我可以嗎?Java併發HashMap

+1

我很好奇爲什麼。如果這是出於性能方面的原因(我可能會過時,但我認爲同時收集的某些性能開銷),您是否有過配置以確保這是您的瓶頸? – 2010-08-31 19:20:25

+1

你必須更具體。 ConcurrentHashMap是一個線程安全的無序地圖實現。 TreeMap是一個非線程安全的有序地圖實現。顯示代碼片段以說明「convert」的含義。 – 2010-08-31 19:20:52

+0

請擴大您的問題:這是一次性轉換爲了一次訪問內容,或全局代碼更改多次獲得排序訪問? – Darron 2010-08-31 19:43:11

回答

5

A ConcurrentHashMap仍然是Map。所以,你可以創建一個新TreeMap這樣的:

ConcurrentHashMap myMap; 
... 
TreeMap myTreeMap = new TreeMap(myMap); 
+0

+1。值得一提的是構造函數在'n log(n)'時間運行 – 2010-08-31 19:28:31

2

首先,我想指出你。你應該學會閱讀java SDK documentation

像Tangens說,和TreeMap API:

ConcurrentHashMAp myMap; 
new TreeMap(myMap); 

注意,此實現 不同步如果多個線程 同時訪問一個映射,並在 的至少一個線程在結構上修改了地圖 ,它必須是 外部同步「

SortedMap m = Collections.synchronizedSortedMap(new TreeMap(...)); 
6

如果你需要一個Sorted ConcurrentMap看看ConcurrentSkipListMap。考慮到它的複雜性,它既非阻塞又快速。更具體地講:

這個類實現併發 變種SkipLists 提供預期平均 的log(n)爲
的containsKey
時間成本,獲取 put和remove 操作及其變體。