オブジェクトのリストがあり、そのリストはとても大きいです。そのオブジェクトは
class Sample {
String value1;
String value2;
String value3;
String value4;
String value5;
}
ここで、リストの中のオブジェクトの特定の値を検索する必要があります。例えば、value3=='three'
であれば、それらのオブジェクトを返さなければなりません(検索は常にvalue3に基づいているわけではありません)。
リストは
List<Sample> list = new ArrayList<Sample>();
効率的な方法は何でしょうか?
ありがとうございます。
常に value3
に基づいて検索する場合は、オブジェクトを Map に格納することができます。
Map<String, List<Sample>> map = new HashMap <>();
そして、マップに key = value3
と value = 同じ value3
プロパティを持つ Sample オブジェクトのリストを入力することができます。
その後、マップを照会することができます。
List<Sample> allSamplesWhereValue3IsDog = map.get("Dog");
注意:もし2つのSample
インスタンスが同じvalue3
を持つことができない場合は、単純にMap<String, Sample>
を使うことができます。
このリストは ArrayList
なので、ソートされていないと考えられます。そのため、O(n)よりも高速に要素を検索する方法はありません。
もし可能であれば、サンプルクラスのリストを特定のComparator
を持つSet
(実装はHashSet
)に変更することを検討すべきです。
もう一つの可能性は、HashMap
を使うことです。データを Sample
として追加し(クラス名は大文字で始めてください)、検索したい文字列をキーとして使用します。そうすると、単純に
Sample samp = myMap.get(myKey);
1つのキーに複数のサンプルを指定できる場合は、Map<String, List<Sample>>
を、そうでない場合はMap<String, Sample>
を使用してください。複数のキーを使用する場合は、同じデータセットを格納する複数のマップを作成する必要があります。これらはすべて同じオブジェクトを指しているので、スペースはそれほど問題にならないはずです'。