有效地过滤Java / Android中的ArrayList

前端之家收集整理的这篇文章主要介绍了有效地过滤Java / Android中的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显示/过滤列表?

这将是实现某种尺寸的推荐方法.

猜你在找的Android相关文章