Saya memiliki sebuah daftar objek dan daftar tersebut sangat besar. Objek tersebut adalah
class Sample {
String value1;
String value2;
String value3;
String value4;
String value5;
}
Sekarang saya harus mencari nilai tertentu dari sebuah objek dalam daftar. Katakanlah jika nilai3=='tiga'
saya harus mengembalikan objek-objek tersebut (Pencarian saya tidak selalu berdasarkan nilai3)
Daftarnya adalah
List<Sample> list = new ArrayList<Sample>();
Apa cara yang efisien untuk melakukannya?
Terima kasih.
Jika Anda selalu mencari berdasarkan nilai3
, Anda bisa menyimpan objek-objek dalam Map:
Map<String, List<Sample>> map = new HashMap <>();
Anda kemudian dapat mengisi peta dengan key = value3
dan value = daftar objek Sampel dengan properti value3
yang sama.
Anda kemudian dapat melakukan query pada peta:
List<Sample> allSamplesWhereValue3IsDog = map.get("Dog");
Catatan: jika tidak ada 2 contoh Sample
yang memiliki value3
yang sama, Anda cukup menggunakan Map<String, Sample>
.
Saya memodifikasi daftar ini dan menambahkan Daftar ke sampel coba ini
Pseudocode
Sample {
List<String> values;
List<String> getList() {
return values}
}
for(Sample s : list) {
if(s.getString.getList.contains("three") {
return s;
}
}
Karena daftar Anda adalah Daftar Larik
, dapat diasumsikan bahwa daftar tersebut tidak terurut. Oleh karena itu, tidak ada cara untuk mencari elemen Anda yang lebih cepat dari O(n).
Jika anda bisa, anda harus berpikir untuk mengubah list anda menjadi sebuah Set
(dengan HashSet
sebagai implementasi) dengan Comparator
khusus untuk kelas sampel anda.
Kemungkinan lain adalah menggunakan HashMap
. Anda dapat menambahkan data Anda sebagai Sample
(silahkan mulai nama kelas dengan huruf besar) dan gunakan string yang ingin Anda cari sebagai kunci. Kemudian Anda bisa menggunakan
Sample samp = myMap.get(myKey);
Jika ada beberapa sampel per kunci, gunakan Map<String, List<Sample>>
, jika tidak gunakan Map<String, Sample>
. Jika Anda menggunakan beberapa key, Anda harus membuat beberapa map yang menampung dataset yang sama. Karena semuanya mengarah ke objek yang sama, ruang seharusnya tidak menjadi masalah.