我何时应该使用ConcurrentSkipListMap?

问题描述 投票:72回答:6

在Java中,ConcurrentHashMap在这里是更好的multithreading解决方案。那我什么时候应该使用ConcurrentSkipListMap?这是多余的吗?

这两者之间的多线程方面是否常见?

java performance multithreading map concurrenthashmap
6个回答
68
投票

这两个类在某些方面有所不同。

ConcurrentHashMap不能保证*其操作的运行时间是合同的一部分。它还允许调整某些负载因子(大约是同时修改它的线程数)。

ConcurrentSkipListMap,另一方面,可以保证各种操作的平均O(log(n))性能。它还不支持出于并发的考虑而进行调整。 ConcurrentSkipListMap还具有ConcurrentHashMap所不具备的许多操作:ceilingEntry / Key,floorEntry / Key等。它还维护一个排序顺序,如果您使用的话,则必须计算该排序顺序(费用不菲)。一个ConcurrentHashMap

基本上,针对不同的用例提供了不同的实现。如果需要快速添加单键/值对和快速查找单键,请使用HashMap。如果需要更快的有序遍历并且可以承受额外的插入成本,请使用SkipListMap

*尽管我希望实现与O(1)插入/查找的常规哈希映射保证大致相符;忽略重新哈希]]


15
投票

排序,可导航和并发


6
投票

就性能而言,SortedMap用作地图时-似乎慢了10到20倍。这是我测试的结果(Java 1.8.0_102-b14,win x32)


1
投票

基于工作量,如果需要范围查询,与ConcurrentNavigableMap中的同步方法相比,ConcurrentSkipListMap可能比TreeMap慢。


0
投票

ConcurrentHashMap:当您要基于多线程索引的获取/输出时,仅支持基于索引的操作。获取/放置为O(1)


0
投票

然后我什么时候应该使用ConcurrentSkipListMap?

© www.soinside.com 2019 - 2024. All rights reserved.