我有一些与java.util.concurrent
包相关的问题:
为什么在java API中,一方存在非并发TreeMap而另一方存在并发ConcurrentSkipListMap?
他们为什么不称它为ConcurrentTreeMap
?说SkipListMap
包含TreeMap
?
例如,非并发HashMap
已获得并发对应ConcurrentHashMap
。为什么TreeMap
不会发生?
答案 0 :(得分:28)
为什么一边是非并发TreeMap,另一边是ConcurrentSkipListMap?
我怀疑这样做是因为并发树形结构太困难或者遇到锁定性能问题。就有序集合而言,SkipLists是非常简单的数据结构,并为树提供类似的行为和性能,因此ConcurrentSkipListMap
(和Set
)可能更容易并发。
我实际上更失望的是我自己没有非并发的SkipList集合。
说SkipListMap包含TreeMap是否安全?
没有。 是安全的,可以说SkipList在有序的项集合方面提供类似的功能,为查找,插入,删除等提供O(logN)
性能。至少它给出了概率近似表现。
这是一个good page about skiplists。它们是非常酷的数据结构。我只希望在现代编程数据结构类中教授它。
答案 1 :(得分:5)
TreeMap
类是这样调用的,因为它是使用balanced search tree实现的。 ConcurrentSkipListMap
以这种方式调用,因为它是使用skip list实现的。为什么没有TreeMap
的并发版本?可能是因为很难使树结构扩展到高水平的并发性;并发跳过列表更容易正确实现。