2010-08-31 97 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 操作及其变体。