在字符串的静态数组中存储具有100.000个单词的字典的单词是一个好主意。我正在研究拼写检查,我认为这样会更快。
答案 0 :(得分:5)
将数字字符串存储为数组肯定不是一个好主意,特别是如果你使用它进行拼写检查,这意味着你必须搜索和比较字符串。通过数组搜索或比较字符串会使效率低下,因为它始终是线性搜索
答案 1 :(得分:5)
对于任何非常重要的事情,您通常应该更喜欢Java Collections Framework类到本机Java数组。在这种特殊情况下,你拥有的是Set<String>
(因为在字典中不会出现任何单词)。
HashSet<String>
为基本操作add
,remove
和contains
提供了恒定的时间性能,并且应该与String
哈希码公式一起使用。
对于较大的词典,您需要使用专门用于存储一组字符串的更复杂的数据结构(例如trie),但对于100K字,HashSet
就足够了。
答案 2 :(得分:1)
内存数据库技术的方法怎么样,例如sqlite inmemory这允许您使用有效的查询而无需磁盘开销
答案 3 :(得分:0)
我认为10万不是那么大,搜索wolud是无效的。当然这取决于...如果你检查一个单词是否存在于数组中它会很好 - 这是一个线性复杂度算法。您可以保持表的顺序,这样您就可以使用快速搜索算法,使其更有效率。
另一方面 - 如果你喜欢找到5个最可能的单词(使用N-gram方法或其他东西),你应该考虑使用Lucene或其他文本数据库。
答案 4 :(得分:0)
也许使用SQLite数据库会更有效率?我认为这就是firefox / thunderbird对拼写检查的作用,但我并不完全确定。
答案 5 :(得分:0)
您将无法将该数量的字符串存储在静态变量中。 Java对静态代码甚至方法体都有大小限制。只需使用flatfile并在类实例化时读取它 - Java比大多数人对这些事情的想法要快。
请参阅Enum exeeding the 65535 bytes limit of static initializer... what's best to do?。