我有一张地图,用于将费用与位置进行对比:
Map<Vector<Double>,Double> positionCost=new HashMap<Vector<Double>,Double>();
位置是double类型的向量。
我通过以下方式为每个职位投入费用:
positionCost.put(position, newcost);
现在我有一个向量,我为所有位置保存了所有成本cost.add(newcost);
。
但是有一个问题 - HashMap
的大小不等于成本向量的大小。
System.out.println("no of particles"+" "+cost.size()+positionCost.size());
我无法弄明白为什么。
答案 0 :(得分:1)
如果您多次添加相同的positionCost
密钥,则Map
Vector
的大小将与费用position
的大小不同Map
。在这种情况下,与该键关联的后一个值将覆盖与该键关联的先前值,并且Map的大小将保持不变。
您应该在添加到地图之前添加条件:
if (!positionCost.containsKey(position)) {
positionCost.put(position, newcost);
} else {
// the key already exists in the map. It might be a bug, or it might be
// a valid situation that you have to decide how to handle
}
答案 1 :(得分:1)
这是因为hashmap的大小取决于key的数量。如果键是相同的,那么它会将它们计为1.因此,在你的情况下,hashmap正在计算position的数量.Hence值是不同的
答案 2 :(得分:0)
您是否有可能在同一位置多次向地图添加位置到成本映射?即相同的Vector对象?或者也许某些位置对象具有相同的哈希码?这意味着您将在某个时刻替换地图中的条目。 Vector对象的行为不同 - 它只是附加对象。因此,我建议打印您正在使用的位置对象的哈希码作为调试的密钥。