2015-09-28 4 views
0

У меня есть s сканер, который анализирует файл и помещает индексы 1 и 2 в хэш-карту.Hasmap возвращает повторяющиеся ключи

позволяет сказать, что k1 = 5 и следующий k1 = 5

будет печатать: 5 и 10 в то время как я хочу только объявления значений и показывать только один ключ. Поэтому я хочу, чтобы значения были добавлены и были «10»

while (scanner.hasNextLine()) {    
    InputLine = scanner.nextLine(); 
    String[] arr = InputLine.split("\t"); 

    if(map.containsKey(arr[1])){ 
     map.put(arr[1], map.get(arr[1]) + Integer.parseInt(arr[2])); 
     } 
    else 
    { 
     map.put(arr[1], Integer.parseInt(arr[2])); 
    }    
    System.out.println(map.get(arr[1])); 
    } 
+2

В чем проблема с кодом? Каков твой вопрос? –

+0

Нет, это не так. – chrylis

+0

есть. Допустим, он читает: и следующей итерации он читает в Вместо того, чтобы вернуться только 11 возвращает 5 и затем 11 на следующей строке – eternalStud

ответ

-1

Это может быть только один осмысленный ответ для этого. Во-первых, дублирующий ключ не может быть сохранен в «Set». Поэтому каждый «ключ» имеет уникальный хэш-код. Вы используете «String» в качестве ключей. После разбора вашей строки вторым элементом вашего массива станет ваш ключ.

Вы говорите, что у вас есть два 5.

XX  5//ends up with no chars 
YY  5 //ends up with a white-space 

Для строки XX ваш первый ключ абсолютно «5». Fot the row YY, ваш ключ станет «5».

Две строки имеют разные хэш-коды. Вот почему они могут храниться в ключе «Set».

Проверьте свой файл до или после символа «\ t». Убедитесь, что есть другой символ после или перед номером.

Смежные вопросы