我创建了一个哈希映射,其中每个条目对应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");
}
答案 0 :(得分:2)
您只创建一个Info
对象,因此HashMap
中的所有键都映射到同一个对象。在地图中插入任何内容时,应创建一个新的Info
对象。