为什么没有并发的TreeMap?

时间:2013-07-15 14:14:34

标签: java concurrency treemap

我有一些与java.util.concurrent包相关的问题:

  1. 为什么在java API中,一方存在非并发TreeMap而另一方存在并发ConcurrentSkipListMap

  2. 他们为什么不称它为ConcurrentTreeMap?说SkipListMap包含TreeMap

  3. 是否安全

    例如,非并发HashMap已获得并发对应ConcurrentHashMap。为什么TreeMap不会发生?

2 个答案:

答案 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的并发版本?可能是因为很难使树结构扩展到高水平的并发性;并发跳过列表更容易正确实现。