簡體   English   中英

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

[英]Java: Most efficient way to check if a String is in a wordlist

我有一個字符串String[] words和一個28000字的單詞列表。

我想檢查String數組的任何成員是否在WordList中(單詞列表在文本文件wordlist.txt中)

什么是最有效的方法?

將字符串直接放入HashSet<String>而不是數組,並使用集合上的contains迭代文件以檢查內容。 你不會改進O(1)訪問。 如果存在任何重復項,這也將最大限度地減少用於存儲Strings內存。

您可以嘗試使用數組(樹)后綴算法,但需要實現,看看:

使用后綴樹的字符串中最長的回文

第1步:不要使用字符串數組。 而不是使用HashSet。

步驟2:將文件(即wordlist.txt)內容加載到另一個HashSet中

第三步:

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;
            }
        }
    }

您可以使用contains方法的HashSet<String>ArrayList<String> 它將檢查您的String是否存儲。
HashSetArrayList之間的區別是hashset不允許重復值,並且它不會維護順序,而arraylist允許您復制及其有序集合。 但是HashSet比arraylist更有效地執行搜索操作。

創建一個字符串的HashSet作為

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

並使用HashSet.contains(Object o)方法檢查HashSet中的word ,其中word是您要檢查的單詞(如果存在)。

存儲而不是原始的words.txt序列化的HashSet。 作為運行應用程序的單獨步驟。

然后,應用程序只需加載一次哈希集。

如果該單詞已經存在於集合中,則HashSetadd()將返回false。

for (String str : words) {
  if (!wordSet.add(str)) {
    System.out.println("The word " + str + " is already contained.");
  }
}

這比contains()更復雜,更低級。

如果您的單詞列表可以適合內存,則HashSet就足夠了。

如果關注內存大小,請使用BloomFilter 雖然布隆過濾器可能會給出錯誤的答案,但您可以調整它發生的概率。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM