繁体   English   中英

巨大的字符串静态数组

[英]Huge Static Array of String

将字典中有100.000个单词的单词存储在静态字符串数组中是个好主意。 我正在研究拼写检查器,我认为这样会更快。

当然,将这么多字符串存储为数组绝对不是一个好主意,特别是如果您将其用于拼写检查,这意味着您必须搜索并比较字符串。 由于它将始终是线性搜索,因此在数组中搜索或比较字符串效率低下

通常,对于任何不重要的事情,您都应该首选Java Collections Framework类而不是本机Java数组。 在这种特殊情况下,您拥有的是Set<String> (因为单词在词典中不应出现多次)。

HashSet<String>为基本操作addremovecontains提供恒定的时间性能,并且应与String哈希码公式配合使用非常好。

对于较大的词典,您想使用专门用于存储一组字符串(例如trie )的更复杂的数据结构,但是对于100K个单词, HashSet应该足够。

也可以看看

内存数据库技术(例如sqlite内存)这样的方法如何呢?这使您可以使用有效的查询而没有磁盘开销

我认为100 000并不是很大,以至于搜索无效。 当然,这取决于...如果您要检查数组中是否存在单词,这会很好用-这是一种线性复杂度算法。 您可以使表格保持有序排列,以便可以使用quicksort搜索算法并使之更有效。

另一方面-如果您愿意查找5个最有可能的单词(使用N-gram方法),则应考虑使用Lucene或其他文本数据库。

也许使用SQLite数据库会更有效? 我认为这就是firefox / thunderbird进行拼写检查的方法,但我不确定。

您将无法在静态变量中存储该数量的字符串。 Java对静态代码甚至方法主体都有大小限制。 只需使用一个平面文件并在类实例化时读取它-Java比大多数人认为的要快。

请参见枚举超过了静态初始化程序的65535字节限制...最好怎么办?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM