我什么时候应该使用 ConcurrentSkipListMap?排序、可导航和并发

在Java中,有更好的解决方案。那么我应该什么时候使用?它是冗余吗?ConcurrentHashMapmultithreadingConcurrentSkipListMap

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


答案 1

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

ConcurrentHashMap 不保证*作为其协定的一部分其操作的运行时。它还允许调整某些负载因子(粗略地说,同时修改它的线程数)。

另一方面,ConcurrentSkipListMap保证了各种操作的平均O(log(n))性能。它也不支持为了并发而进行调整。 还有一些操作没有:ceilingEntry/Key,floorEntry/Key等。它还维护一个排序顺序,否则,如果您使用的是 .ConcurrentSkipListMapConcurrentHashMapConcurrentHashMap

基本上,为不同的用例提供了不同的实现。如果需要快速添加单键/值对和快速查找单键,请使用 .如果您需要更快的顺序遍历,并且能够负担得起额外的插入成本,请使用 .HashMapSkipListMap

*虽然我预计该实现大致符合O(1)插入/查找的一般哈希映射保证;忽略重新散列


答案 2

排序、可导航和并发

有关数据结构的定义,请参阅跳过列表

ConcurrentSkipListMap 按其键的自然顺序(或您定义的其他键顺序)存储映射。因此,它的 // 操作速度比 HashMap 慢,但为了抵消这一点,它支持 SortedMapNavigableMapConcurrentNavigableMap 接口。getputcontains


推荐