Javaオブジェクトのリストで検索する方法

オブジェクトのリストがあり、そのリストはとても大きいです。そのオブジェクトは

class Sample {
    String value1;
    String value2;
    String value3;
    String value4;
    String value5;
 }

ここで、リストの中のオブジェクトの特定の値を検索する必要があります。例えば、value3=='three'であれば、それらのオブジェクトを返さなければなりません(検索は常にvalue3に基づいているわけではありません)。

リストは

List<Sample> list = new ArrayList<Sample>();

効率的な方法は何でしょうか?

ありがとうございます。

常に value3 に基づいて検索する場合は、オブジェクトを Map に格納することができます。

Map map = new HashMap ();

そして、マップに key = value3 と value = 同じ value3 プロパティを持つ Sample オブジェクトのリストを入力することができます。

その後、マップを照会することができます。

List allSamplesWhereValue3IsDog = map.get("Dog");

注意:もし2つのSampleインスタンスが同じvalue3を持つことができない場合は、単純にMapを使うことができます。

解説 (3)

このリストに修正を加え、サンプルにリストを追加してみました。

疑似コード

Sample {
   List values;
   List getList() {
   return values}
}

for(Sample s : list) {
   if(s.getString.getList.contains("three") {
      return s;
   }
}
解説 (2)

このリストは ArrayList なので、ソートされていないと考えられます。そのため、O(n)よりも高速に要素を検索する方法はありません。

もし可能であれば、サンプルクラスのリストを特定のComparatorを持つSet(実装はHashSet)に変更することを検討すべきです。

もう一つの可能性は、HashMapを使うことです。データを Sample として追加し(クラス名は大文字で始めてください)、検索したい文字列をキーとして使用します。そうすると、単純に

Sample samp = myMap.get(myKey);

1つのキーに複数のサンプルを指定できる場合は、Mapを、そうでない場合はMapを使用してください。複数のキーを使用する場合は、同じデータセットを格納する複数のマップを作成する必要があります。これらはすべて同じオブジェクトを指しているので、スペースはそれほど問題にならないはずです'。

解説 (0)