我已经使用嵌套的HashMap编写了代码,并且试图找出如何将内部映射键所指向的所有值都放入ArrayList中,以便对其进行正确排序。 我的地图看起来像这样:
HashMap<String,HashMap<String,Double>> vlist;
我的想法是创建另一个HashMap,使其具有与之前显示的内部映射相同的键和值, 然后以这种方式填充它。
HashMap<String,Double> vlistvalues = new HashMap<>(vlist.values());
我得到一个编译错误,我可以发现编译器不知道我的外部映射的值就是一个映射本身,但是在阅读哈希映射文档时,我没有找到适合我情况的方法。
基本上我想将此处声明的内部映射的所有值HashMap<String,Double>> vlist;
放入这样的列表ArrayList<Double> listOfValues;
如果不清楚,我是编程新手:-)
我将显示一个示例:
我的地图HashMap<String,Hashmap<String,Double>>
代表加权图的邻接表。我需要对所有边缘进行排序(因为我正在尝试实现Kruskal的算法),我的想法是将所有权重放入列表中,执行以下操作:
ArrayList<String> vertexList; //all the vertices of the graph
ArrayList<Double> weights;
HashMap<String,String> orderedEdges = new HashMap<>(); //here i put ordered edges
double min = Collections.min(weights); //i use this double to keep track of the minimum element in weights
for(String vertex1 : vertexlist){
makeSet(vertex1);
for(String vertex2 : ajacents(vertex1)){
if(getEdgeWeight(v1,v2) <= min){ //method "getEdgeWeight" is to retrieve weight of an edge
orderedEdges.put(v1,v2);
min = getEdgeWeight(v1,v2)
weights.remove(min) //i'm not sure this line is correct
}
}
}
在线查看一些伪代码,我发现它可以进行不交集并在同一for循环中对边进行排序。可能我的代码效率不高,但是我真的不知道如何在不访问所有图形的情况下对边缘进行排序。附言:我不能使用优先级队列,但我完全知道我要做的事情类似