1

我正在编写一个存储一组约 50.000 个字符串的 android 应用程序,我需要输入如何最好地存储它们。

我的目标是能够以低延迟查询与Hello W*模式(如or )匹配的字符串列表*m Aliv*,但避免大量的初始化时间。

我想到了以下两种方式:

  1. 一个java集合。我想一个 java 集合应该可以快速搜索,但考虑到它相当大,我担心它可能会对应用程序初始化时间产生很大影响。
  2. SQLite 数据库中的表。我想这在初始化时会很容易(因为它不需要加载到内存中),但我担心查询会带来一些相关的延迟,因为它需要启动一个 SQLite 进程(或者不是吗? )。

我的“想象”是正确的还是大错特错?哪种方式最好?

4

4 回答 4

5

如果您想要快速(如即时)搜索时间,您需要的是字符串的全文索引。幸运的是,SQLite 有一些带有FTS 扩展的全文搜索支持。SQLite 是 Android API 的一部分,初始化时间完全可以忽略不计。您需要注意的是索引(.sqlite 文件)必须在 .apk 中随您的应用程序一起提供,或者在第一次打开时重新创建(这可能需要相当长的时间)

于 2013-08-22T19:14:12.557 回答
1

查看数据结构,例如 patricia trie ( http://en.wikipedia.org/wiki/Radix_tree ) 或三元搜索树 ( http://en.wikipedia.org/wiki/Ternary_search_tree )。它们将大大减少您的搜索时间,并且根据字符串中的重叠量,实际上可能会减少内存需求。Java 集合适用于许多用途,但不适用于大型短字符串集。

于 2013-08-22T19:06:52.893 回答
1

我肯定会坚持使用 SQLite。初始化和查询都非常快。SQLite 在应用程序进程中运行,因此初始化几乎没有时间损失。查询通常在后台线程中触发,以不阻塞主线程。它在 50.000 条记录上会非常快,而且您不会将所有数据加载到内存中,这也很重要。

于 2013-08-22T19:14:15.663 回答
-1

在这种情况下,您的字符串编号为 50,您可以使用 java 集合数据库将花费时间。

于 2013-08-22T19:07:16.537 回答