Мой ключ HashMap <String, ArrayList> получает неправильные значения - PullRequest
0 голосов
/ 25 октября 2011

Я в основном беру большой блок символов и использую каждый суффикс в качестве ключа, каждый ключ указывает на ArrayList, который содержит индекс, в котором можно найти каждый из этих суффиксов.

Когда я делаюHashMap.get (суффикс) дает мне индекс ключа, который он добавил последним, а не тот, который я пытаюсь вытащить (это происходит с дубликатами ...

Вот оно,

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

Ответы [ 2 ]

5 голосов
/ 25 октября 2011

Мне кажется, что вы используете один и тот же экземпляр ArrayList на всей своей карте.Возможно, вместо вызова clear вам следует создать новый ArrayList, когда суффикса нет на карте.

2 голосов
/ 25 октября 2011

У вас есть только один объект ArrayList, который вы изменили и поместили на карту.

В конце каждый ключ ссылается на один и тот же список.

Вам необходимо создать список массивов для каждого ключа.

...