如何存储大的字符串列表以优化初始化时间和搜索速度

时间:2013-08-22 18:55:38

标签: java android

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

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

我想到了以下两种方式:

  1. 一个java集合。我想java集合应该很快 搜索,但鉴于它相当大,我担心它可能有一个 对应用初始化时间产生重大影响。
  2. SQLite数据库中的一个表。我想这会很容易 初始化时间(因为它不需要加载到内存), 但是我担心这个查询会产生一些相关的延迟 需要启动一个SQLite进程(或者不是吗?)。
  3. 我的“想象”是正确的还是可怕的错误?哪种方式最好?

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

答案 3 :(得分:-1)

你的字符串不是50在这种情况下你可以使用java集合数据库将是时间。