正如您从标题中看到的那样,我正在尝试将HashMap的键与来自ArrayList的int键进行比较。对于前47次比较,38 = 38,但在48次比较中,38 != 38。你能帮我吗?
`@Override
public HashMap<Integer, Integer> populate(int roomId){
ArrayList<Item> original = items.populateTable(roomId);
HashMap<Integer, Integer> refined = new HashMap<>();
for(int i = 1; i < original.size(); i++){
Iterator it = refined.entrySet().iterator();
refined.put(original.get(0).getStockId(), 1); // put the first item in the hashMap
while(it.hasNext()){
Map.Entry pair = (Map.Entry)it.next();
if( pair.getKey().equals( original.get(i).getStockId() ) ) //if item is not in hashMap
{
System.out.println(pair.getKey()+"++");
refined.put(original.get(i).getStockId(), refined.get(original.get(i).getStockId()) + 1); //increment the value
}
else{
System.out.println("NEW:"+pair.getKey());
refined.put(original.get(i).getStockId(), 1); // add it to hashMap
}
}
}
Iterator it1 = refined.entrySet().iterator();
while(it1.hasNext()){
Map.Entry pair1 = (Map.Entry)it1.next();
System.out.println(pair1.getKey() + " = " + pair1.getValue());
}
return refined;
}`发布于 2017-05-31 21:21:30
看起来你在解决问题,数数数组中遇到的所有数字,如果是一种情况,你就做错了。在38!=38 (控制台中的‘New: 38’)的迭代中,它不再是38,它比较38和39,这就是下一行'39++‘的原因。
在这里你可能想做什么。
ArrayList<Item> original = items.populateTable(roomId);
HashMap<Integer, Integer> refined = new HashMap<>();
for(int i = 0; i < original.size(); i++){
int key = original.get(i).getStockId();
int count = refined.containsKey(key) ? refined.get(key) : 0;
refined.put(key, count + 1);
}
Iterator it1 = refined.entrySet().iterator();
while(it1.hasNext()){
Map.Entry pair1 = (Map.Entry)it1.next();
System.out.println(pair1.getKey() + " = " + pair1.getValue());
}输入38,38,38,39,39
产
38 =3
39 =2
https://stackoverflow.com/questions/44294055
复制相似问题