2013-07-15 46 views
14

我有關於java.util.concurrent;包幾個問題:爲什麼沒有併發的TreeMap?

  1. 爲什麼Java API中有一側的非併發TreeMap和一個其他併發ConcurrentSkipListMap

  2. 他們爲什麼不把它叫做ConcurrentTreeMap?說SkipListMap包含一個TreeMap是否安全?

例如非併發HashMap已經得到了它的併發對應ConcurrentHashMap。爲什麼TreeMap不會發生?

+0

你的問題是不可理解的。每個物體呢?它爲什麼存在?它能做什麼?它是如何聞到的? – hexafraction

+1

向誰表示與編程無關。 API與編程有關。 – Rollerball

+0

我從來沒有說過它沒有關係。我剛纔說這完全不清楚。 – hexafraction

回答

20

爲什麼一邊是非併發的TreeMap,另一邊是ConcurrentSkipListMap?

我懷疑這是因爲製作併發樹結構太困難或遭受鎖定性能問題。就有序集合而言,SkipLists是非常簡單的數據結構,爲樹提供了類似的行爲和性能。

我其實更加失望的是我自己並沒有一個非併發的SkipList集合。

可以肯定的說SkipListMap包含TreeMap嗎?

號這肯定地說,一個SkipList給出了項目的有序集合,它爲查找,插入,刪除等O(logN)性能方面是相似的特點..它至少給人一種概率逼近的表現。

這是good page about skiplists。他們是非常酷的數據結構。我只能希望在現代編程數據結構類中教授這些東西。

4

TreeMap類是這樣調用的,因爲它是使用balanced search tree實現的。 ConcurrentSkipListMap就是這樣調用的,因爲它使用skip list實現。爲什麼沒有TreeMap的併發版本?可能是因爲很難製作可擴展到高級併發性的樹結構;併發跳過列表更容易正確實施。