2017-05-07 118 views
-1

因此,對於我的編程類,我提交了一個AI程序,該程序根據從示例字符串中獲取的統計信息生成了單詞。但是,下面的代碼行極大地減緩了計劃:重複通過初始化加速程序

//Opens and reads the Dictionary 
Scanner inputFile = new Scanner(new File("common_words.txt")); 
while (inputFile.hasNext()) { 
    wordCheck = inputFile.nextLine(); 
    if (wordCheck.equalsIgnoreCase(aiWord)) {//Stops dictionary if word is found 
     inputFile.close(); 
     break; 
    // ... 

這個過程,直到一個詞被創造了被列入單詞列表。我的問題是,如果我將單詞列表初始化爲一個數組,可以加快這個過程嗎?我想我會讀取RAM而不是HDD。我試圖在我的代碼中實現這一點,但它在>中拼接太複雜了。 <

+1

用字的'java.util.List'(全部大寫,或者如果你想不區分大小寫的搜索小寫),'名單#包含'也許 – 2017-05-07 06:05:00

+0

common-words.txt有多大?如果它適合內存,請使用HashMap –

+1

是的,如果可能的話,將其讀入單個內存對象。不斷打開和閱讀文件將會非常緩慢。如果文件非常大,您可能需要提出某種索引方案,以便可以更快地讀取文件(或其中的一部分)。 – markspace

回答

2

這將是更好的速度,可以使用您剛纔設置一次使用靜態初始化,像這樣一個HashSet

private static final Set<String> lowerCaseWords = new HashSet<String>(); 
static { 
    final Scanner inputFile = new Scanner(new File("common_words.txt")); 
    while (inputFile.hasNextLine()) { 
     lowerCaseWords.add(inputFile.nextLine().toLowerCase()); 
    } 
    inputFile.close(); 
} 

靜態初始化(在static {塊)只運行一次上課的時候被加載,允許您在加載類時只加載一次Set中的所有單詞。


然後,您可以使用Set像這樣:

if (lowerCaseWords.contains(candidateWord.toLowerCase()) { 
    // Is a word 
} else { 
    // Isn't a word 
}