2014-11-09 64 views
1

我有地圖它映射與位置花費:添加在Java HashMap中的關鍵值對

Map<Vector<Double>,Double> positionCost=new HashMap<Vector<Double>,Double>(); 

位置是雙精度型載體。

我把成本各個位置的:

positionCost.put(position, newcost); 

現在我有一個載體,我保存所有的成本生產cost.add(newcost);所有的位置。 但有一個問題 - HashMap的大小不等於成本向量的大小。

System.out.println("no of particles"+" "+cost.size()+positionCost.size()); 

我無法弄清楚爲什麼。

+1

嗯,事情是,當你比較矢量大小,將給你的矢量大小和散列表,你得到的是你添加的所有矢量的大小。所以這不會是平等的。也許它可能只是兩個分開的事情。請參閱hashmap手冊 – Krishna 2014-11-09 07:30:30

+0

爲什麼「位置」是「Vector」?你的變量_cost_是什麼? – Seelenvirtuose 2014-11-09 07:35:22

+0

@Seelenvirtuose,因爲它有4個不同的座標,我將它們表示爲一個向量。 – cauchy 2014-11-09 07:37:42

回答

0

positionCostMap的大小將不一樣的成本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 
} 
0

是否有可能要添加一個位置,以低價映射到地圖中多次爲同一位置?即同一個Vector對象?或者也許某些位置對象具有相同的哈希碼?這將意味着您將在某個時候替換地圖中的條目。 Vector對象的行爲不同 - 它只是附加對象。所以我建議打印您正在使用的位置對象的哈希碼作爲調試的關鍵。

1

這是因爲散列表的大小取決於鍵的數量。如果鍵是相同的,那麼它會將它們計爲1.因此,在您的情況下,散列表正在計算位置的數量。因此值不同