HashMap代码没有给出所需的结果

时间:2012-02-04 15:09:33

标签: java hashmap

我创建了一个哈希映射,其中每个条目对应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 个答案:

答案 0 :(得分:2)

您只创建一个Info对象,因此HashMap中的所有键都映射到同一个对象。在地图中插入任何内容时,应创建一个新的Info对象。