2010-11-22 4 views
3

私のデータ構造体クラスの割り当ては、ある単語から別の単語への最短経路を見つけることです。ファイル内のすべての単語を長さで1つの読みに並べ替えます。 (Java)

すなわちスタート:出血 - >ブレンド - >金髪 - >終了:私はマップを使用してグループに持っている単語のリストを与えられています。3.

のコストと血、。ここで、

キー:単語の長さ、値:その長さのすべての単語の集合。

私は既にプログラムを終了しましたが、マップにセットを保存する方法を変更するとパフォーマンスが向上すると思います。今私はテキストファイルをスキャンし、各個別の単語をArrayListに格納し、次にリストから各単語を削除しながらArrayListを通り、長さxのすべての単語をセットに格納します。 ArrayListの最初の要素からListが空になるまで、私はそれを続けます。

ファイルを読み込んでいるときにこの並べ替えを実行でき、ArrayListを完全に避けることができたら、私はそれを思い出しました。

これは私が持っているコードです:任意の入力を事前に

ArrayList<String> wordList = new ArrayList<String>(); 
Map<Integer, Set> setMap = new HashMap<Integer, Set>(); 
Graph pathGraph = new Graph(); 

private void readFile(String file) { 
    try { 
     FileReader f = new FileReader(file); 
     BufferedReader reader = new BufferedReader(f); 
     String line = ""; 
     while ((line = reader.readLine()) != null) { 
      wordList.add(line); 
     } 

    } catch (Exception e) { //Done in case of an exception 
     System.out.println("No file found."); 
    } 
} 

private void mapMaker() { 
    int wordLength = 1; 
    Set<String> wordSet = new HashSet<String>(); 
    while (!wordList.isEmpty()) { 
     wordSet = setBuilder(wordLength); 
     if (!wordSet.isEmpty()) { 
      setMap.put(wordLength, wordSet); 
     } 
     wordLength++; 
    } 
} 

private Set<String> setBuilder(int x) { 
    Set<String> wordSet = new HashSet<String>(); 
    int counter = 0; 
    while (counter < wordList.size()) { 
     if (wordList.get(counter).length() == x) { 
      wordSet.add(wordList.get(counter)); 
      wordList.remove(counter); 
     } else { 
      counter++; 
     } 
    } 
    return wordSet; 
} 

おかげで、。

答えて

4
private void readFile(String file) { 
    try { 
     FileReader f = new FileReader(file); 
     BufferedReader reader = new BufferedReader(f); 
     String word = ""; 
     while ((word = reader.readLine()) != null) { 
      int length = word.length(); 
      if(setMap.containsKey(length)) { 
       setMap.get(length).add(word); 
      } else { 
       Set set = new HashSet<String>(); 
       set.add(word); 
       setMap.put(length, set); 
      } 
     } 

    } catch (Exception e) { //Done in case of an exception 
     System.out.println("No file found."); 
    } 
} 
+0

おかげで、私はあなたがに記憶されている設定にアクセスすることができました実現しませんでしたそのような地図。だから、私は余分な方法を持っていた。 –

2

あなたはGuava'sMultiMapを使用することができます。

例:

 String[] words={"world","hello","abc","bcd","abc"}; 
     SetMultimap<Integer,String> lenMap=HashMultimap.create(); 
     for(String str:words)//instead read word's from file in your case 
      lenMap.put(str.length(),str); 

出力:

{3=[abc, bcd], 5=[hello, world]} 
関連する問題