Bir nesne listem var ve liste çok büyük. Bu nesne
class Sample {
String value1;
String value2;
String value3;
String value4;
String value5;
}
Şimdi listedeki bir nesnenin belirli bir değerini aramam gerekiyor. Diyelim ki değer3=='üç'
ise bu nesneleri döndürmem gerekiyor (Aramam her zaman değer3'e dayalı değil)
Liste şu şekildedir
List<Sample> list = new ArrayList<Sample>();
Bunu yapmanın etkili yolu nedir?
Teşekkürler.
Her zaman value3
temelinde arama yapıyorsanız, nesneleri bir Map içinde saklayabilirsiniz:
Map<String, List<Sample>> map = new HashMap <>();
Daha sonra haritayı key = value3
ve value = aynı value3
özelliğine sahip Sample nesnelerinin listesi ile doldurabilirsiniz.
Daha sonra haritayı sorgulayabilirsiniz:
List<Sample> allSamplesWhereValue3IsDog = map.get("Dog");
Not: 2 Örnek
örneği aynı değer3
e sahip olamazsa, sadece bir Map<String, Sample>
kullanabilirsiniz.
Bu listeyi değiştiriyorum ve örneklere bir Liste ekliyorum şunu deneyin
Sözde kod
Sample {
List<String> values;
List<String> getList() {
return values}
}
for(Sample s : list) {
if(s.getString.getList.contains("three") {
return s;
}
}
Listeniz bir ArrayList
olduğundan, sıralanmamış olduğu varsayılabilir. Bu nedenle, elemanınızı aramak için O(n)'den daha hızlı bir yol yoktur.
Eğer yapabilirseniz, listenizi örnek sınıfınız için özel bir Comparator
ile bir Set
e (uygulama olarak HashSet
ile) dönüştürmeyi düşünmelisiniz.
Başka bir olasılık da bir HashMap
kullanmak olabilir. Verilerinizi Sample
olarak ekleyebilir (lütfen sınıf adlarını büyük harfle başlatın) ve aramak istediğiniz dizeyi anahtar olarak kullanabilirsiniz. Daha sonra basitçe şunları kullanabilirsiniz
Sample samp = myMap.get(myKey);
Anahtar başına birden fazla örnek olabiliyorsa Map<String, List<Sample>>
, aksi takdirde Map<String, Sample>
kullanın. Birden fazla anahtar kullanırsanız, aynı veri kümesini tutan birden fazla harita oluşturmanız gerekecektir. Hepsi aynı nesnelere işaret ettiğinden, alan o kadar da sorun olmamalıdır.