2011-10-25 11 views
0

ビルド待ち行列が必要です。キューは常にそのキーによってソートされたままです。 TreeMapの継ぎ目は、この例のように、それのために素晴らしいことする: http://www.javaexamples4u.com/2009/03/treemap-comparator.html が、大きな問題は、そのスレッドセーフではないということです、そして、私はConcurrentNavigableMap
は素晴らしいたが、どのように私は、TreeMapのと同じように、コンパレータを同じように使うのですか?私はそれのための例を見つけませんでした。Java ConcurrentNavigableMapをTreeMapではなくComparatorで使用するにはどうすればよいですか?

答えて

1

あなたが実際にPriorityQueueを探しているようですね。スレッドセーフなバージョンが必要な場合は、PriorityBlockingQueueを使用できます。

プライオリティキューを使用すると、順アイテム取得することができますキューである「重要性を。」 Javaの場合、Comparatorまたは項目の自然順序(Comparableを実装している場合)を使用できます。

あなたが本当にConcurrentNavigableMapを使用する必要がある場合は、そのようConcurrentSkipListMapとしての実装を使用する必要があります。 ConcurrentSkipListMapのインスタンスを割り当て、使用するコンパレータに渡します。

new ConcurrentSkipListMap<MyKeyType, MyValueType>(new MyKeyComparator()); 
1

ConcurrentNavigableMapは単なるインタフェースです。それを実装する具体的なクラスを使用する必要があります。標準コレクションライブラリではConcurrentSkipListMapです。

あなたは基本的にドロップイン交換TreeMapのため、コンパレータを使用して含むものとしてConcurrentSkipListMapのを使用することができるはずです。オペレーションは一般的には類似のパフォーマンス特性(O(log n))を持ちますが、ConcurrentSkipListMapのsize()オペレーションでは変数を読み込むのではなく、スキップリストをトラバースする必要があることを理解しています。大きな地図。

関連する問題