2

キーではなく値でソートできる同時マップまたは同様のキー - >値ストレージを使用する方法を探しています。

これまでConcurrentSkipListMapを見ていましたが、メソッドがパラメーターとしてキーのみを受け取るため、( Comparatorを使用して)値で並べ替える方法が見つかりませんでした。compare

マップには、文字列のキーと整数の値があります。私が探しているのは、最小値(整数)でキーを取得する方法です。

また、2 つのマップを使用して、整数キーと文字列値を使用して別のマップを作成することも考えていました。このようにして、必要に応じて整数でソートされたマップが作成されますが、同じ値を持つ整数が複数存在する可能性があります。私をより多くの問題に導く可能性があります。

"user1"=>3 "user2"=>1 "user3"=>3

ソート済みリスト: "user2"=>1 "user1"=>3 "user3"=>3

これを行う方法はありますか、またはこれを行うことができるサードパーティのライブラリはありますか?

ありがとう

4

3 に答える 3

1

私は最近これをしなければならずConcurrentSkipListMap、キーに文字列と整数が含まれる場所を使用することになりました。私は以下に提案された答えを使用することになりました。重要な洞察は、前のキーを削除する前に、異なる値を持つキーの複製を許可するようにコードを構成できるということです。

ConcurrentSkipListMap / ConcurrentSkipListSetでキーを並べ替えるアトミックな方法は?

問題は、以下で説明するように、異なるスレッドから同時に変更される可能性のある整数に関連付けられた文字列の動的セットを保持することでした。それはあなたがやりたいことと非常によく似ています。

Redis に代わる組み込み可能な Java はありますか?

私の実装のコードは次のとおりです。

https://github.com/HarvardEconCS/TurkServer/blob/master/turkserver/src/main/java/edu/harvard/econcs/turkserver/util/UserItemMatcher.java

于 2013-03-26T18:52:53.057 に答える
1

複数の「値」から「キー」へのマッピングが可能な値でソートするには、MultiMapが必要です。並行バージョンがないため、これを同期する必要があります。

これは、このデータ構造を呼び出す頻度に依存するため、パフォーマンスが低下するという意味ではありません。たとえば、1 マイクロ秒まで追加できます。

于 2012-09-16T14:31:48.137 に答える
0

a の原則は、ConcurrentMap同時にアクセスできるということです。いつでもソートしたい場合は、マップを完全に同期する必要があるため (ハッシュテーブルのように)、パフォーマンスが大幅に低下し、スループットが低下します。

したがって、たとえば、変更不可能な TreeMap にすべての要素を配置して、マップの並べ替えられたビューを返すことが最善の策だと思います (ただし、TreeMap を値で並べ替えるには少し調整が必要です)。

于 2012-09-16T14:33:16.590 に答える