Код HashMap не дает желаемых результатов - PullRequest
0 голосов
/ 04 февраля 2012

Я создал хеш-карту, в которой каждая запись соответствует 3 значениям Значения ключевых объектов (которых два)

Я создал класс, чей объект я создаю и сохраняю результаты в хэш-карте. Это мой код ниже, в котором я сравниваю свои входящие данные с предыдущими значениями в хэш-карте. Если приходят те же данные, я просто увеличиваю счетчик этих данных. Проблема в том, что он печатает одни и те же данные несколько раз. Почему это так?

class Info {
    int counter;
    String Data;
}
Info info = new Info();

int i=0;
int lines=0;

HashMap<String, Info> hMap = new HashMap<String, Info>();

try {
    BufferedReader reader =
                     new BufferedReader(new FileReader("E:\\write1.txt"));
    String line = null;
    while ((line = reader.readLine()) != null)
    {
        lines++;
        if(line.startsWith("Data:"))
        {
            String comingdata = line.replaceAll("Data:","");
            if(hMap.isEmpty())  // first time to put data in hashmap
            {
                info.counter=1;
                info.Data=comingdata;
                hMap.put("1",info);
            }
            else
            {
                int m=0;
                // everytime it will run to
                // check to increment the counter if the value already exists
                for(i=1;i<=hMap.size();i++)
                {
                    String skey = Integer.toString(i);

                    if(hMap.get(skey).Data.equals(comingdata))
                    {
                        hMap.get(skey).counter=  hMap.get(skey).counter+1;
                        m=2;
                    }
                }
                // making new entry in hashmap
                if(m==0)
                {                                  
                    String skey = Integer.toString(hMap.size()+1);
                    info.counter=1;
                    info.Data=comingdata;
                    hMap.put(skey,info);
                }
            }// else end
        }  //if end
    } //while end
}  //try end
catch (Exception e) { }
for(i=1;i<=hMap.size();i++)
{
    String skey= Integer.toString(i);
    System.out.println(hMap.get(skey).Data);
    System.out.println(hMap.get(skey).counter);
    System.out.println("\n");
}

1 Ответ

2 голосов
/ 04 февраля 2012

Вы создаете только один объект Info, поэтому все ключи в HashMap отображаются на один и тот же объект.Когда вы вставляете что-либо в карту, вы должны создать новый Info объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...