Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.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 最优搜索数据结构_Java_Search_Tree_Large Files - Fatal编程技术网

Java 最优搜索数据结构

Java 最优搜索数据结构,java,search,tree,large-files,Java,Search,Tree,Large Files,我在发帖前搜索了这个,但是我找不到任何对我有帮助的东西。 我正在使用java。我有一个30万字的文件(已按字母顺序排序)。 我想把这些单词加载到一个结构中,然后搜索我要传递的单词 存在与否。我想要最适合字符串搜索的东西。我见过大约 尝试(后缀树)和红黑树(树集-因为我只需要键,并且 没有值(在java中) 如果你考虑回答,请给出一些有关效率的解释。 对你的提议的支持。多谢各位 编辑 结构将通过加载文件来创建,并且不会有进一步的更改 添加单词。 不需要区分大小写。 我不知道词干是什么。我现在知道了

我在发帖前搜索了这个,但是我找不到任何对我有帮助的东西。 我正在使用java。我有一个30万字的文件(已按字母顺序排序)。 我想把这些单词加载到一个结构中,然后搜索我要传递的单词 存在与否。我想要最适合字符串搜索的东西。我见过大约 尝试(后缀树)和红黑树(树集-因为我只需要键,并且 没有值(在java中)

如果你考虑回答,请给出一些有关效率的解释。 对你的提议的支持。多谢各位

编辑 结构将通过加载文件来创建,并且不会有进一步的更改 添加单词。 不需要区分大小写。 我不知道词干是什么。我现在知道了,但我不知道这是否有用。
该文件是一个字典(没有翻译,只是给定语言的单词)。

哈希将是您的最佳解决方案。它以恒定的时间搜索树集,树集是log(n)时间

如果在创建时声明集合足够大,则还可以以固定时间存储

创建时间为:n,您需要将排序集包含在单独的结构中


这是一个优化的解决方案,用于搜索重复项,而不是内存或添加数据。

区分大小写是否重要?你在用词干吗?你打算增加更多的单词吗?就我个人而言,我使用tries。如果你必须使用JDK类,我会选择
集合
。您可以通过它的一些实现对其进行备份:
HashSet
LinkedHashSet
TreeSet
,这取决于您在使用
Set
时的需要。我不必这样做,但对我来说会更容易。你为什么不把这个贴出来作为答案呢?我已经编辑了我的问题。请提供您的意见。你会怎么做?感谢您的帮助,我建议您链接到
HashSet
,因为OP没有键/值对。通过您的编辑,我可以说HashMap就足够了。您可以使用n(300.000)个操作创建集合,并且可以通过单个(恒定时间)操作从那里读取。它将是一个如jlordo所述的哈希集。我只有键,没有值。树集将为O(logn),哈希集为O(n)。对于这种大小的数据,如果它是对数的,不是更好吗?Hashset有一个最坏情况的查找O(n),但它的平均情况是O(1)。此外,树集将需要重复调用
compareTo
,这是字符串大小的O(n);Hashset只需要比较hashcodes(常数时间)以及单个调用
equal
(字符串大小为O(n)),感谢Zim Zam的详细解释。