java - 在 Java/Android 中高效地过滤 ArrayList

标签 java android filter arraylist

我正在开发一个 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/

相关文章:

android - 只能在 facebook 请求前向 Bundle 添加一个参数

android - 从 Activity android调用时不想刷新tabsactivity

python - jinja2 自定义过滤器 "TemplateAssertionError: no filter named ' format_number'"

angularjs - ng-options 和唯一过滤器不显示 angular.js

python - Django:按值过滤或返回所有记录

java - 空值的 XStream 解析器空标记

java - URL url = getClass().getResource ("") 指的是哪个位置?

java - 按从最高-> 最低的每个字符串解析的整数对 ArrayList<String> 进行排序?

java - 如何限制JtextField在数据库中放置额外的空格?

android - 在两次抽奖之间暂停