高效地在Java中的10k行文件中查找字符串



我需要检查用户输入的密码是否包含在本地存储在我的计算机中的10k行.txt文件中。我被要求为一个大学项目做这件事,他们非常强调要以有效的方式做到这一点,不要花太长时间找到匹配的人。

问题是,使用BufferedReader逐行读取文件,几乎可以立即完成匹配。

我在两台电脑上测试过,一台是ssd,另一台是hdd,我分不清区别。

我是不是错过了什么?还有其他更有效的方法吗?例如,我可以将文件或文件块加载到内存中,但这值得吗?

10k密码并不多,应该很容易放入RAM。您可以在应用程序启动时将文件读取到内存中,然后只访问内存中的结构。内存中的结构甚至可以被解析以提供更有效的查找(即使用HashMapHashSet(,或者在内存中以O(n×logn(的一次性成本对其进行排序,以实现对列表的二进制搜索(最多可以用14步搜索10k个项目(。或者,您可以使用更高级的数据结构,例如bloom过滤器。

只要记住:当你写"它几乎是瞬间的";,那么它可能已经足够有效了。(同样,10k密码并不算多,文件大小可能只有约100kB(