0

タイプのオブジェクトが 5,000 個以上のメモリ内コレクションがある場合SampleObject

class SampleObject {
  ...
  Date getLastRefreshDate()
  Status getCurrentStatus()
}

特定の値よりも古い更新日を持つオブジェクトのサブリストをすばやく取得し、特定のステータスのオブジェクトをすばやく取得できるようにしたいのですが、どのデータ構造/アルゴリズムが役立ちますか? リストの繰り返しと比較の実行速度は十分ですか? リストが 25,000 以上になったらどうしますか?

4

3 に答える 3

2

ATreeMap<Date, SampleObject>は、特定の日付より「古い」ものを取得する仕事を非常に簡単に行うことができheadMapます。ある値よりも古いすべてのオブジェクトを取得するために使用するだけです。

ただし、特定のステータスのオブジェクトを追跡するには、別のMap<Status, List<SampleObject>>(または、サードパーティのライブラリを使用できる場合は Guava Multimap) が必要ですが、支払いたくない場合は、いずれにしても 2 番目のデータ構造は避けられないと思います。線形検索。

于 2012-05-08T14:41:20.060 に答える
1

NavigableSetおよびNavigableMapクラスは、まさにそれを行うためのメソッドを提供します。

NavigableSetheadSetやのようなメソッドをすでに提供しておりtailSet、他の特定の要素の前後にあるすべての要素を取得できます。Comparatorクラスの自然な順序としてまだ提供されていない場合は、日付基準を使用できますSampleObject

lowerfloorceiling、 などの他の便利なメソッドに加えてhigher

同様にNavigableMap、headMap や tailMap などの同様のメソッドを提供して、まったく同じ種類のスライスを行います。

于 2012-05-08T14:45:04.257 に答える
0

特定の値よりも古い更新日を持つオブジェクトのサブリストを取得し、特定のステータスのオブジェクトをすばやく取得することもできます

k次元の範囲または検索の問題のように聞こえます。オプションは次のとおりです。

ほとんどの場合、データを 1 次元のみで返す場合は、並べ替えられた構造を介して線形アクセスを回避できる可能性があります。

于 2012-05-08T17:08:47.543 に答える