Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
运行前从大型文本文件创建树结构(Java/Android)_Java_Android_Tree_Spell Checking - Fatal编程技术网

运行前从大型文本文件创建树结构(Java/Android)

运行前从大型文本文件创建树结构(Java/Android),java,android,tree,spell-checking,Java,Android,Tree,Spell Checking,我目前正在开发一款用Java编写的Android文字游戏,它需要一些拼写检查方法来检查玩家创建的文字是否正确。我有一个完整的正确单词列表(波兰语)保存在文本文件(*.txt)中,但它非常庞大,因为它包含近300万个单词,大小为35MB。我做了一些研究,发现保存这些数据的最佳结构是因为它在空间和时间上都是有效的 我的问题是如何在运行前从我的巨大文本文件中创建三元搜索树结构?它不能在运行时执行,因为它需要很长时间,而且我的内存也会用完(我已经尝试过了,只是出于好奇它会以何种方式崩溃)。因此,我认为最

我目前正在开发一款用Java编写的Android文字游戏,它需要一些拼写检查方法来检查玩家创建的文字是否正确。我有一个完整的正确单词列表(波兰语)保存在文本文件(*.txt)中,但它非常庞大,因为它包含近300万个单词,大小为35MB。我做了一些研究,发现保存这些数据的最佳结构是因为它在空间和时间上都是有效的

我的问题是如何在运行前从我的巨大文本文件中创建三元搜索树结构?它不能在运行时执行,因为它需要很长时间,而且我的内存也会用完(我已经尝试过了,只是出于好奇它会以何种方式崩溃)。因此,我认为最好的方法是在编译之前创建这样的结构,并将其作为某种资源添加到项目中,但不幸的是,我不知道如何做到这一点。如果在编译之前无法实现,您可能知道如何在编译期间创建这样的结构

更多详情:

  • 我真的想使用这个文本文件作为我的字典,所以请不要建议我使用其他字典服务
  • 我需要在此数据结构上执行的唯一方法是:
    布尔值包含(字符串单词)
    ,它将告诉我单词是否正确

如果您只需要
.contains(字符串词)
并且大小仅为35 MB,我建议使用,
哈希集。它的作用与字典完全一样,而且由于字符串可以很好地散列,因此它的构建速度也非常快。
包含(word)
也是性能为O(1)的集合的内置方法

如果您不想在运行时构建字典,您可以将其转储到一次(应用程序第一次运行)并在将来从中读取


编辑:我不知道android应用程序有一个最大内存限制。您可以通过将整个文件转储到一个可以非常高效地读取和写入的数据库(这只是一个文件)来避免这种情况。请检查一下电话号码。如果您有eclipse,并且示例是从android sdk管理器安装的,那么您可以启动一个新项目(android示例),从该项目中选择Searchable Dictionary示例,并查看源代码,了解它如何处理从.txt文件创建数据库的问题。上面的链接包含有关安装示例的完整说明。android数据库(SQLite)显然支持高达1TB的数据库,因此您应该不会有问题。

感谢您建议使用HashSet而不是三元搜索树-这似乎是个好主意。但这仍然不能解决我的问题——当我试图在运行时从文件中构建字典哈希集时,我得到了预期的
OutOfMemoryError
。我不确定您是否熟悉android开发,但内存非常有限。是否可以构建您在运行时之前提到的数据库并将其用作资源?