巨大的字符串静态数组

时间:2010-07-27 11:35:01

标签: java string static

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

6 个答案:

答案 0 :(得分:5)

将数字字符串存储为数组肯定不是一个好主意,特别是如果你使用它进行拼写检查,这意味着你必须搜索和比较字符串。通过数组搜索或比较字符串会使效率低下,因为它始终是线性搜索

答案 1 :(得分:5)

对于任何非常重要的事情,您通常应该更喜欢Java Collections Framework类到本机Java数组。在这种特殊情况下,你拥有的是Set<String>(因为在字典中不会出现任何单词)。

HashSet<String>为基本操作addremovecontains提供了恒定的时间性能,并且应该与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?