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