有什么方法可以计算列表操作的内存开销/计算能力。背景如下:

我在页面上有一个 ListView ,该页面上有例如底部的3个标签(全部,搜索,最近)。现在,如果您单击选项卡,则 ListView 应显示适当的项目。

现在有两种不同的方法,一种是:

使用单个ListAdapter,相应地过滤项目
-如果单击全部,只需将数据库中的所有项目放入其中
-如果您单击“最近”,则只需放入符合要求的项目

使用两个(三个)ListAdapters ,每个类别一个
-如果单击全部,则将列表的setAdapter()设置为适当的
-如果您单击“最近”,则将setAdapter()设置为适当的一个

我们正在谈论200个项目的列表,这些项目是从数据库中创建的复杂对象。例如搜索项目时,输入标题的一部分,并且列表应仅显示适当的项目。这些项目将不会被重新创建,我将只查询ID,并使用缓冲的项目(有关数据结构,请参阅下文)。

我也不确定的是“在哪里过滤”,我可以在数据库中执行此操作(从标题为abc的位置选择),然后再进行以下操作:

  • 从列表中删除不匹配的项,添加所有匹配的(但不包括)项
  • 清除整个列表,添加所有匹配的

  • 再次说明一下应用数据的结构:
  • 数据库,带有原始简单条目(ID +标题+ ...)
  • HashSet带有复杂条目的,从数据库创建一次,只读 +总是所有条目
  • ArrayList 列表中显示的当前条目

    希望您能如愿以偿,我正在尝试“昂贵”的操作。也许,作为回答的最后动机,我将写下一些案例,您可以对它们的成本发表看法:
  • 从带有“title LIKE”的数据库中选择N个项目(仅ID)
  • 使用“title.contains()”迭代200个项目的列表,并且仅使用
  • 从数组列表中删除100个项目 ListView 显示
  • 从未显示的数组列表中删除100个项目,然后连接并显示

  • 感谢您提供任何反馈意见或不良做法的提示。通过处理可见的列表元素,而不是首先在“后台”进行操作,然后设置新的ListAdapter,尤其是可能的事件触发问题

    最佳答案

    我看到您已经接受了答案,但是我想我不同意,因为ArrayList必须复制所有元素,如果中间是添加或删除的元素。

    我了解您已经拥有一个包含所有条目的HashSet

    在那种情况下,我认为最有效的适配器是自 ListAdapter 启发而来的自定义ArrayAdapter

  • 您的适配器存储所有条目的ArrayList mAllObjects(用于“all”选项卡)。
  • 您的适配器存储最近条目的ArrayList mRecentObject(用于“最近”选项卡)
  • 您的适配器存储匹配条目的ArrayList mMatchObject(用于“搜索”选项卡)
  • 您的适配器有两个过滤器
  • 最近的过滤器返回mRecentObject列表(如果尚不存在,则创建它)
    匹配过滤器
  • 创建一个新的mMatchObject列表并添加匹配元素。这里没有优化要完成。 ArrayList上的delete()方法为O(n)。
  • 关于android - 使用过滤功能,多个ListAdapter或单个ListAdapter(Android性能),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8378459/

    10-09 04:25