1

我有一个带有两个字符串键的嵌套地图(地图中/地图中的地图)。基本上我所做的是我有一组节点,我找到它们之间的最短路径。但是我需要存储它们并稍后使用它们,所以我做了以下操作:

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

我使用循环给这个 Map 赋值,其中 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)

但是我找不到办法做到这一点。我知道 Guava Table(我知道这正是我需要的),但是我更愿意在这种情况下找到解决方案。

4

2 回答 2

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>

    }
}

另请注意,我建议不要像您编辑的问题一样使用 keySet 作为 ParkingDests 。你不会得到保证的订单。您应该将 ParkingDests 保留为数组。

于 2013-10-25T19:52:11.350 回答
1

我建议使用 Graph 数据结构。您可以使用JGraphT。它具有计算最短路径的Dijkstra 算法的实现。节点将是您的 ParkingDests,边的权重将是您的距离旅行时间。最佳路线将是子图。玩得开心。

于 2013-10-25T20:00:18.707 回答