ゲームでは、ユーザーのリストを保持してスコアで並べ替えようとしているので、いつでもリストをクエリして、スコアで上位10人のユーザーを返すことができます。このリストはスレッドセーフである必要があります。userName文字列をキーとして使用することを想定しており、値はComparableを実装し、displayNameやscoreなどのプロパティを持つUserオブジェクトになります。したがって、Userオブジェクトには、スコア属性を比較してその位置を決定するcompareToメソッドがあります。
これにConcurrentSkipListMapを使用することを検討していますが、私が知る限り、Map(Setではなく)はキーを使用して並べ替えます。Userオブジェクトのscoreプロパティでリストを並べ替えたいのですが、特定のユーザーにアクセスしてスレッドからスコア属性を変更できる必要があるため、引き続きMapを使用します。
自分のコンパレータをキーに使用しても問題が解決するようには思えません。比較のために関連する値にアクセスできるとは思えないからです。ConcurrentSkipListSetを使用することもできますが、リストにアクセスして個々のユーザーのスコアを変更すると、(毎回繰り返す必要があるため)コストのかかる操作になります。
誰かがこれを達成する方法を提案することができますか?