Java:检查String是否在wordlist中的最有效方法

时间:2013-09-06 12:52:26

标签: java string-comparison

我有一个字符串数组String[] words和一个28000字的单词列表。

我想检查String数组的任何成员是否在WordList中(单词列表在文本文件wordlist.txt中)

最有效的方法是什么?

8 个答案:

答案 0 :(得分:9)

将字符串直接放入HashSet<String>而不是数组中,然后使用集合上的contains遍历文件以检查内容。你不会改进O(1)访问。如果存在任何重复项,这也将最小化用于存储Strings的内存。

答案 1 :(得分:2)

您可以尝试使用数组(树)后缀算法,但需要实现,请看:

Longest palindrome in a string using suffix tree

答案 2 :(得分:1)

步骤1:不要使用字符串数组。而不是使用HashSet。

步骤2:将文件(即wordlist.txt)内容加载到另一个HashSet

第3步:

Set<String> set1 = new HashSet<String>(); //Load the string array into set
    Set<String> set2 = new HashSet<String>(); //load the file contents into set
    for (String str : set1) {
        for (String str2 : set2) {
            if (str.equalsIgnoreCase(str2)) {
                break;
            }
        }
    }

答案 3 :(得分:0)

您可以使用HashSet<String>或具有ArrayList<String>方法的contains。它会检查你的字符串是否存储。
HashSetArrayList之间的区别是hashset不允许重复值,并且它不会维护顺序,而arraylist允许您复制及其有序集合。 但是HashSet比arraylist更有效地执行搜索操作。

答案 4 :(得分:0)

创建HashSet字符串为

HashSet<String> wordSet = new HashSet<String>(Arrays.asList(words));

使用HashSet.contains(Object o)方法检查word中的HashSet,其中word是您要检查的单词是否存在。

答案 5 :(得分:0)

存储而不是原始的words.txt序列化的HashSet。作为运行应用程序的单独步骤。

然后,应用程序只需要加载一次哈希集。

答案 6 :(得分:0)

HashSet的{​​{1}}如果该字词已经出现在该集合中,则返回false。

add()

这比for (String str : words) { if (!wordSet.add(str)) { System.out.println("The word " + str + " is already contained."); } } 更复杂,更低级别。

答案 7 :(得分:0)

如果您的单词列表可以适合内存,则HashSet就足够了。

如果关注内存大小,请使用BloomFilter。虽然布隆过滤器可能会给出错误的答案,但您可以调整它发生的概率。