【问题标题】:Android SQLITE search VS ArrayList search for small amount of datasetAndroid SQLITE 搜索 VS ArrayList 搜索少量数据集
【发布时间】:2017-02-05 17:22:51
【问题描述】:

假设,在我的应用程序中,我有一个最多可以包含 20 行的 sqlite 表。每行有 2 列(id,name)。我经常需要按 ID 搜索以获取名称的地方。对于这种频繁的需求,我有两个解决方案:

解决方案 1: 获取 arraylist<model> 中的行,然后从数组中查找名称。

解决方案2:每次搜索sqlite表。

现在请发表您的意见,哪个更好? 再次记住,我需要在我的 recycleView 项目中进行此搜索,所以它调用得如此频繁。

谢谢

【问题讨论】:

  • 你是否在 recyclerview 中显示所有 20 条数据?
  • 没有。我有一个无尽的recycleView。并且在该 recycleview 的每个项目上都需要来自这 20 个数据集表的 Name by Id。 @AjayShrestha

标签: android sqlite search optimization arraylist


【解决方案1】:

我真的不明白你的真正意图是什么,但如果你的任务是经常按 id 搜索,我会使用

LongSparseArray<String> idsToNames; // or LongSparseArray<Model>

它将以比Map 更节省内存的方式将原始long 映射到字符串,并且在搜索时具有比ArrayList 更好的性能。

在这里查询 SQLite 的优势在于,您可以以阻塞的方式进行,而不必每次运行查找时都在后台线程上查询数据库。

缺点是每当 SQLite 中的数据发生变化时,您都必须重新构建您的 idsToNames 映射。此外,如果 SQLite 中的条目数量最终会增加,那么您最终会得到一个大集合。因此,仅当此会话期间不会发生对数据库的更新,并且数据大小始终是可预测或固定的时,我才会推荐这种方法。

【讨论】:

  • 数据大小是固定的。那么 LongSparseArray 比 SQLITE 查询更好吗?
  • @ShohanAhmedSijan 如果你说你会经常搜索,那么我会说是的。但你真正的任务是什么?例如,如果您的真正任务是打开一个详细信息屏幕,我会将 id 传递给详细信息屏幕并在那里加载模型。
  • 是的,这只是一个无限循环视图的视图屏幕,其中每个项目都需要按 ID 显示名称。非常感谢您的宝贵回答。 :)
  • @ShohanAhmedSijan “无尽的循环视图”?只有 20 件商品?
  • @ShohanAhmedSijan 所以当您的数据来自 sqlite 查询时,为什么不使用基于 Cursor 的适配器(类似于 CursorAdapter 用于“正常”ListVieew)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-31
  • 2015-12-01
  • 1970-01-01
  • 2013-02-15
  • 1970-01-01
  • 1970-01-01
  • 2012-02-01
相关资源
最近更新 更多