2012-11-11 54 views
0

我製作了一個小型Java程序,用於從txt文件加載單詞列表,用戶可以在TreeSet中逐字選擇並存儲單詞列表。 現在我需要編寫一個函數,當用戶在文本字段(keyPressed)中鍵入某個東西時,函數會被調用,並且它會查找/返回此TreeSet中以用戶輸入的字母開頭的所有單詞。 我是新的使用設置,所以我的解決辦法是從第一個迭代到集合的最後一個元素,並打印出滿足標準的:Java - 如何在輸入時有效地顯示單詞列表中的單詞

Iterator <String>itr = dictionary.iterator(); 
String currentWord; 
String tempUserInput = "av"; // Temporary, to simulate user input 
while(itr.hasNext()){ 
    currentWord = itr.next(); 
    if (currentWord.startsWith(tempUserInput)) { 
     System.out.println(currentWord); // Temporary, to simulate output 
    } 
} 

這工作正常,但由於它需要越過30萬字對於返回值,我的問題是:是否有更有效的解決方案來解決這個問題?

回答

3

最好的解決方案是使用trie這是一個適合您的問題的數據結構。它旨在用於降低複雜性,同時處理共享前綴的元素(通常是字符串)。

一些工作

其實我想你可以使用一個TreeSet通過欺騙

public NavigableSet<E> subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) 

這可以通過將作爲fromElement這是目前輸入並作爲toElement相同的字符串添加了足夠的'z'字符的字符串工作作爲集合中最長的字符串(這個長度可以在填充TreeSet時計算)。例如:

subSet("foo", true, "foozzzzzzzz", true); 
+0

謝謝!我絕對會開始研究一個trie。 – Vorta

+0

subSet(「foo」,true,「foo」+「\ ufffd」,false);涵蓋每一個案例。 – Fabien

相關問題