0

ユーザーが選択したtxtファイルから単語リストをロードし、単語ごとにTreeSetに保存する小さなJavaプログラムを作成しました。ここで、ユーザーがテキスト フィールド (keyPressed) に何かを入力するたびに関数が呼び出され、ユーザーが入力した文字で始まるこの TreeSet 内のすべての単語を検索/返す関数を作成する必要があります。私の解決策は、セット内の最初の要素から最後の要素まで繰り返し、基準を満たす要素を出力することです。

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

これは適切に機能しますが、戻り値として 300000 ワード以上を渡す必要があるため、私の質問は次のとおりです。この問題に対するより効率的な解決策はありますか?

4

1 に答える 1

3

最善の解決策は、問題に適したデータ構造であるトライを使用することです。接頭辞を共有する要素 (通常は文字列) を操作する際の複雑さを軽減するために使用することを意図しています。

実際にいくつかの作業を行っていると、だまして TreeSet を使用できると思います

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

これは、現在入力されている文字列を fromElement として渡し'z'、セット内の最長の文字列として十分な文字数を追加した同じ文字列を toElement として渡すことで機能します (この長さは、 に入力するときに計算できますTreeSet)。例えば:

subSet("foo", true, "foozzzzzzzz", true);
于 2012-11-11T20:31:50.453 に答える