2017-12-07 14 views
0

Javaのソート済みデータ構造を探しています。いくつかの研究をした後、TreeSet/TreeMapの使用に関するヒントはほとんどありません。しかし、これらのコンポーネントには、セット内の要素へのランダムアクセスという欠点があります。たとえば、ソートされたセットのn番目の要素にアクセスしたいが、TreeSetを使用すると、そこに到達する前に他のn-1要素を反復処理する必要があります。私のセットには何千もの要素があるので、それは無駄でしょう。ログの読み取りの複雑さを考慮したタイムスタンプベースのソート済みデータ構造

ユースケースは、私は常にそのユーザーによる最新の編集したタイトルを表示したいような

9:20 AM what is this object? edited by user1 
9:30 AM what is this book ? edited by user2 
9:40 PM what is this red book? edited by user1 

を下回っています。私は、最新のものが最高のタイムスタンプであることを知っています。このため私はConcurrentSkipListSet/Mapsが良いことが分かった。しかし、私は、この機能を実装するためのよりよい方法があるかどうかを知りたいと思います。

+0

バランスの取れたツリーでは、N-1個のエントリではなく、ログN個のエントリを反復するだけで済みます。 –

+1

なぜ変数の最新の要素を覚えていないのですか?なぜコレクションが必要ですか? – kan

+0

私は分かりません。 TreeSetとTreeMapは、特に、get()メソッドを介して要素にランダムアクセスするためのビルドです。 – SaiBot

答えて

0

データをソートしておくべきであると仮定した場合、最も良いベットはTreeMapです。ソートされたコレクションである銀色の弾丸はありませんまたO(1)ランダムアクセスを実行します。順序付けされたコレクションでは、インデックスを持つ要素に直接アクセスできますが、コレクションのソートが必要な場合はインデックスベースのアクセスの恩恵を受けることはできません。

同時実行が必要な場合はConcurrentSkipListMapが良いです。データへの大規模な同時アクセスに適しています。しかし、パフォーマンスに関しては、Red-Blackツリーベースの友人TreeMapとは一致しません。したがって、同時実行性が必要ない場合は、ConcurrentSkipListMapを忘れて、TreeMapを使用してください。

TreeMapは、あなたのニーズを満たすものです。それにもかかわらず、実際には、HashMapを使用し、必要に応じてデータを並べ替える方が良いかもしれません。両方を試してみて、どちらが良いかを調べてください。

関連する問題