在java hashMap中添加键值对

时间:2014-11-09 07:25:48

标签: java hashmap

我有一张地图,用于将费用与位置进行对比:

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());

我无法弄明白为什么。

3 个答案:

答案 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对象的行为不同 - 它只是附加对象。因此,我建议打印您正在使用的位置对象的哈希码作为调试的密钥。