web-dev-qa-db-ja.com

なぜ並行TreeMapがないのですか?

Java.util.concurrentパッケージに関していくつか質問があります。

  1. Java APIで、片側に非並行 TreeMap があり、もう一方に並行 ConcurrentSkipListMap があるのはなぜですか?

  2. なぜそれをConcurrentTreeMapと呼ばなかったのですか? SkipListMapTreeMapが含まれていると言っても安全ですか?

たとえば、非並行HashMapは、並行する対応物ConcurrentHashMapを持っています。なぜTreeMapが発生しないのですか?

25
Rollerball

なぜ片側に非並行TreeMapがあり、もう一方にConcurrentSkipListMapがあるのですか?

これは、ツリー構造を並行して作成することが非常に困難であるか、ロックのパフォーマンスの問題に悩まされていたためだと思います。順序付けられたコレクションの観点から、SkipListsは非常に単純なデータ構造であり、ツリーと同様の動作とパフォーマンスを提供するため、 ConcurrentSkipListMap (およびSet)の方が簡単な場合があります同時。

自分で非同時のSkipListコレクションがないことに、私は実際にもっとがっかりしています。

SkipListMapにTreeMapが含まれていると言っても安全ですか?

いいえ。SkipListは、O(logN)のパフォーマンスを提供する項目の順序付けられたコレクションに関して同様の機能を提供すると言っても安全ですisルックアップ、挿入、削除など。少なくとも、そのパフォーマンスの確率的近似を提供します。

これが スキップリストについての良いページ です。それらは非常にクールなデータ構造です。私はそれらが現代のプログラミングデータ構造クラスで教えられることを望みます。

TreeMapクラスは バランス検索ツリー を使用して実装されているため、このように呼び出されます。 ConcurrentSkipListMapスキップリスト を使用して実装されているため、このように呼ばれます。 TreeMapの同時バージョンがないのはなぜですか?おそらく、高いレベルの並行性に対応するツリー構造を作成するのが難しいためです。同時スキップリストを正しく実装する方が簡単です。

5
Joni