2013-10-25 33 views
1

我有一個嵌套的映射(映射在映射中)和兩個字符串鍵。基本上我所做的是我有一組節點,我找到它們之間最短的路線。不過,我需要存儲它們,並在以後使用它們,所以我做了以下內容:爲嵌套映射賦值java

private Map<String, Map<String,Object>> TravelTime = 
new HashMap<String, Map<String,Object>>(); 

我使用一個循環給值這個地圖,其中ParkingDests是一組另一個HashMap中的鍵(字符串):

ParkingDests = ParkingAttributes.keySet().size(); 
for (int i = 0;i< ParkingDests; i++){ 
    for (int j = 0;j< ParkingDests; j++){ 

     <code> TravelTime.put(keyone,keytwo,Shortest) </code> 

    } 
} 

我想我需要的是這樣的:

TraveTime.put(ParkingDests(i),ParkingDest(j), ShortestRoute) 

但是我無法找到一個方法來做到這一點。 我知道番石榴表(我知道這正是我所需要的),但我更願意在這種情況下找到解決方案。

+0

你確定你想要的不是:'HashMap ,Object>'? – Cruncher

+0

你可以給我們一個'ParkingDests'的類型嗎? – svs

+0

你可能想看看關於Java稀疏矩陣的問題http://stackoverflow.com/questions/390181/sparse-matrices-arrays-in-java – Tarik

回答

3

您想在添加新路由之前查看是否添加了輔助HashMap。在這裏,我假設ParkingDests是一個字符串數組。我還假設,你的標籤意味着你在生成ShortestRoute對象的代碼中包裝這個循環。絕對沒有必要將其存儲爲一個通用的對象,但我敢肯定,你只是簡化了你的問題很好地爲我們的利益:)

for (int i = 0;i< ParkingDests; i++){ 
    for (int j = 0;j< ParkingDests; j++){ 

     <code> 
     second = TravelTime.get(ParkingDests[i]) 
     if(second == null) { 
      second = new HashMap<String, Object>() 
      TravelTime.put(ParkingDests[i], second); 
     } 
     second.put(ParkingDests[j],Shortest); 
     </code> 

    } 
} 

另外請注意,我建議不要使用密鑰集像你編輯的問題ParkingDests 。你沒有得到保證的順序。你應該把ParkingDests作爲一個數組。

+0

我認爲這就是它!我改變了ParkingDests到數組tnx的建議!事實上,我擴大了我的代碼,事實也就是它做了什麼;) –

1

我會建議使用圖形數據結構。你可以使用JGraphT。它具有計算最短路徑的Dijkstra Algorithm的實現。節點將是您的ParkingDests並且邊緣的重量將是您的距離的旅行時間。 最佳路線將是一個子圖。玩的開心。

+0

我使用Graph結構來計算最短路徑,但是我需要將起始目標的成本/路由存儲爲一些特定對用作對象包含從一個節點到所有其他節點的旅行信息;)。非常感謝你的建議。 –