2017-10-14 3 views
0

私は1つのクラスの多くのインスタンスを含む非常に大きなリストを持って、このクラスは多くの属性(メンバー変数)があります。私の問題は、データベース検索のような複数の属性に基づいた検索を可能にするこれらのインスタンスを格納するための実現可能なデータ構造を見つけることです(学生クラス、各生徒は年齢、生年月日、学年および年齢がGPAです。 20と23の間)。単一のキーしか許されていないため、マップは適用できないようです。また、検索用の複数の属性インデックスを作成しても、大きなOは減少しません。私はまた、AVLツリーのような木を使うことも考えていましたが、それはうまくいくとは思いません。どのように選択したり、複数の属性の検索を許可する自分のJavaのデータ構造を書く

誰かが私にいくつかのヒントを与えることができたら、私は感謝します。

+1

1つのオプションは、実際にデータベースを使用することです。メモリ内のものかもしれない。または、検索エンジン(Lucene、Solr、ElasticSearch) –

+0

を使用すると、要件のデータ項目をより明確にすることができますか? –

+0

@ JensSchauder私は本当にデータベースが必要だと思いますが、データ構造の質問であるため、データ構造を使ってメモリ内でこの問題を解決することができます。 –

答えて

1

あなたは、Inverted Index(属性名+値をキーとして使用します)または属性ごとに1つの反転インデックスを探していると思います。検索では、各属性で見つかったすべての結果の共通部分が作成されます。

0

あなたはこれを行うことができます:


  • は、ほとんどの再発属性(ただ一つ、例えば「ID」または「名前」)によってソートされたオブジェクトとAVLツリーを構築します。
  • が、代わりに値をとるの、Javaのラムダ式のFをとり、検索機能を作成するには、与え例えば
  • (ので、あなたのseacrh条件がF(myObj) == true代わりmyObj.deFaultAttribute == searchParameterのようなものでなければならない)、Fは((myObj) -> myObj.year==2 && myObj.age>=20 && myObj.age<=23)のようなものかもしれません
私はそれが役に立ちそうです。

+1

これはうまくいくと思いますが、時間の複雑さを本当に改善できるかどうかはまだ分かりませんが、この解決策とキーを使用した検索を除いて検索のために直接リストを使用することに違いはないと思います。 –

関連する問題