我正在创建一个包含大约100,000个单词的字典,这些单词将存储在txt文件中。我是否知道如果我读取txt文件并将每个单词存储到arrayList中然后使用二进制搜索来搜索特定单词,它会影响android应用程序的性能吗?或者有没有更好的解决方案来增强/优化Android的txt文件中的单词搜索?
谢谢
答案 0 :(得分:2)
如果你在UI线程上执行,那么是的,它会对应用程序的性能产生影响,特别是如果用户有旧设备。具体来说,您的应用程序将在您完成搜索所需的时间内完成ANR。
如果您在后台线程上执行此操作(例如,使用AsyncTask
*),则不会对应用程序的响应速度产生影响。但是,后台线程通常具有较低的优先级,因此搜索将花费更长的时间。当然,如果您的应用程序运行的设备是较旧的单核设备,您的主应用程序会感觉有点迟钝,因为CPU将在两个线程之间共享。
就搜索单词的实际算法而言,二进制搜索并不是非常糟糕。但是,一点索引可以帮助您加快搜索速度。当您加载数组中的单词列表时,还要为每个字母表字母创建一个简单的索引,指向以它开头的第一个单词。这样,缩小二进制搜索范围的操作基本上将为O(1)。从技术上讲,这并不会改变算法的理论性能(你仍然受到二进制搜索O(log n)的约束),但实际上它会对实际性能产生直接影响。
在旁注中,我写了一个简单的单词求解器应用程序,它在后台线程和现代设备(Galaxy Nexus或Nexus 7)上进行线性单词搜索,即使这种方法还可以,并允许我更新搜索用户输入的结果速度相对较快。所以这一切都取决于您执行搜索的频率。
AsyncTask
有自己的问题,所以请用它来引导你的代码,但是一旦掌握了你的主要逻辑,就尽快切换到更好的解决方案。