我正在开发一个 Android 应用程序 (Android 1.6),但这可能是一个更一般的 Java 问题。
我有一个包含大约 10,000 个对象的 ArrayList
对象包含 3 个字符串(firstName、middleName、lastName)。
用户在 android 上会看到一个“搜索框”,他们可以在其中通过键入名称的一部分来搜索特定的“对象”。
我有一个类(我称之为 Filterer)搜索 10,000 个匹配对象的列表,然后将它们作为“子列表”返回。
搜索有点慢(尤其是在 Android 手机上),我确定我没有以最有效的方式进行搜索/过滤。
有没有人对如何加快我的搜索有任何建议?我的代码如下。一种可能是针对辅助“masterList”进行搜索,该列表已经包含小写和串联的每条信息……但可能还有其他方法可以改进此搜索,这也会有所帮助。
TIA!!
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);
}
}
}
最佳答案
是的,为每个循环迭代小写几个对象肯定很痛苦(加上可能多余的 toString
?),而且调用 list.size()
也是不好的做法。对于每次迭代——该值应该在循环开始之前缓存。
无论如何,如果您要处理这么多数据,是否有理由不使用 SQLite 数据库来存储和使用 CursorAdapter
显示/过滤您的列表? ?
这将是实现这种规模的推荐方法。
关于java - 在 Java/Android 中高效地过滤 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2139410/