में एक ऐरेलिस्ट को कुशलतापूर्वक फ़िल्टर करें, मैं एक एंड्रॉइड ऐप (एंड्रॉइड 1.6) विकसित कर रहा हूं, लेकिन यह शायद एक सामान्य जावा प्रश्न है।जावा/एंड्रॉइड
मैं लगभग 10,000 वस्तुओं
की एक ArrayList है वस्तुओं 3 तार (firstName, middleName, lastName) होते हैं।
उपयोगकर्ता को एंड्रॉइड पर "खोज बॉक्स" के साथ प्रस्तुत किया जाता है जहां वे नाम के हिस्से में टाइप करके एक विशेष "ऑब्जेक्ट" खोज सकते हैं।
मेरे पास एक कक्षा है (जिसे मैं फिलटेरर कहता हूं) जो मिलान करने वाली वस्तुओं के लिए 10,000 की सूची के माध्यम से खोज करता है और फिर उन्हें "उपन्यासकार" के रूप में लौटाता है।
खोज थोड़ी सी धीमी है (विशेष रूप से एंड्रॉइड हैंडसेट पर) और मुझे यकीन है कि मैं सबसे कुशल तरीके से खोज/फ़िल्टरिंग नहीं कर रहा हूं।
क्या किसी के पास मेरी खोज को गति देने के बारे में कोई सुझाव है? मेरा कोड नीचे है। एक माध्यमिक "मास्टरलिस्ट" के खिलाफ खोज करने की एक संभावना है जिसमें पहले से ही लोअरकेस और समेकित में जानकारी का हर टुकड़ा है ... लेकिन इस खोज को बेहतर बनाने के अतिरिक्त तरीके भी हो सकते हैं जो मदद भी करेंगे।
टीआईए !!
public void filterNames() {
this.filteredList.clear();
String sv = this.searchString.toString.trim().toLowerCase(); // search value
for (int i = 0; i < this.masterList.size(); i++) {
MyObject d = this.masterList.get(i);
String fn = d.getFirstName().toString().toLowerCase();
String mn = d.getMiddleName().toString().toLowerCase();
String ln = d.getLastName().toString().toLowerCase();
if (fn.indexOf(sv) >= 0 ||
md.indexOf(sv) >= 0 ||
ln.indexOf(sv) >= 0) {
this.currentList.add(d);
}
}
}
यहाँ समान समस्या के लिए देखो: http://stackoverflow.com/questions/2085445/fast-index-for- इसमें स्ट्रिंग को सी ++ से दिमाग में पूछा जाता है, लेकिन सामान्य समाधान (डेटा संरचनाएं और एल्गोरिदम) भाषा स्वतंत्र होती है। – WildWezyr