2011-10-25 8 views
0

私は基本的に文字の大きなブロックを取り、それぞれのサフィックスをキーとして使用しています。接尾辞が見つかります。私のHashMap <String、ArrayList>のキーが間違った値を取得しています

私はHashMap.get(接尾辞)を行うと、それは私ではなく、それが最後の追加キーのインデックス、私はこれが重複で発生(プルしようとしているものを与える...

ここそれはあなたがあなたの全体マップで同じArrayListインスタンスを使用しているよう

protected HashMap<String, ArrayList<Integer>> makeMap(char[] textStored) 
{ 
    HashMap<String, ArrayList<Integer>> phraseMap = 
      new HashMap<String, ArrayList<Integer>>(); 
    ArrayList<Integer> indexList = new ArrayList<Integer>(); 
    Boolean word = true; 
    String suffix; 
    int wordEndIndex = 0; 
    for (int i = 0; i < textStored.length; i++) { 
     word &= Character.isLetter(textStored[i]); 
     if (word) { 
      for (int h = i + 1;h < textStored.length;h++) { 
       if (!Character.isLetter(textStored[h])) { 
        wordEndIndex = h; 
        break; 
       } 
      }//PULLING THE NEXT SUFFIX vvv 
      //This finds the next word/suffix: 
      suffix = new String(textStored).substring(i,wordEndIndex + 1); 

      //if my hashmap already contains this key: 
      if (phraseMap.containsKey(suffix)) { 
       System.out.println(suffix); 
       indexList = phraseMap.get(suffix); 
       System.out.println(indexList);// This is printing 
        // the wrong info, 
        // telling me my phraseMap.get(suffix) is 
        // using the wrong key, yet 
        // I'm printing out the suffix 
        // directly before that line, 
        // and I'm definitatly inputting 
        // the correct suffix... 
       indexList.add(i); 
       phraseMap.put(suffix,indexList); 
       System.out.println(indexList); 
      } else { 
       // System.out.println(suffix); 
       indexList.clear(); 
       indexList.add(i); 
       phraseMap.put(suffix, indexList); 
       // System.out.println(phraseMap.get(suffix)); 
      } 

     } 
     word = !Character.isLetter(textStored[i]); 
    } 

    return phraseMap; 
} 
+1

インデントは大幅に読みやすさを向上させます – michael667

答えて

5

は私には思える。おそらく、代わりにclearを呼び出すのサフィックスがマップにないときは、新しいArrayListをインスタンス化する必要があり、です。

2

マップに変更して配置するArrayListオブジェクトは1つだけです。

最後に、すべてのキーは同じリストを参照します。

各キーの配列リストを作成する必要があります。

+0

「facepalming」の時間はそれほど簡単でした!ありがとう! – ChrisB92

関連する問題