我有一個HashMap中,其關鍵是距離和值是ArrayList中包含基於其在特定的距離(即密鑰)優先級隊列的ArrayList HashMap的
我要讓HashMap中的優先級隊列的頂點列表(優先級在鍵上)來獲得一次處於特定距離的所有頂點。
是否有可能使這樣的優先級隊列(無界的)? 任何人都可以幫忙嗎?
我有一個HashMap中,其關鍵是距離和值是ArrayList中包含基於其在特定的距離(即密鑰)優先級隊列的ArrayList HashMap的
我要讓HashMap中的優先級隊列的頂點列表(優先級在鍵上)來獲得一次處於特定距離的所有頂點。
是否有可能使這樣的優先級隊列(無界的)? 任何人都可以幫忙嗎?
您可以使用class來封裝距離和頂點。實現Comparable
接口或通過Comparator
對象時,您將new
PriorityQueue
。你可以這樣做以下...
class Node implements Comparable<Node> {
int distance;
List<Vertex> list;
public Node(int distance, List<Vertex> list) {
this.distance = distance;
this.list = list;
}
@Override
public int compareTo(Node o) {
// your compare logic goes here
return Integer.compare(this.distance, o.distance);
}
}
=====
public static void main(String[] args) {
PriorityQueue<Node> q = new PriorityQueue<>();
}
的PriorityQueue是無界的,它的增長動態地根據在隊列中的元素個數。它在任何時候都具有內部容量,並隨着元素的添加而增加。
但是,在將其轉換爲PriorityQueue時,如果希望按鍵排序地圖(即距離),則使用按距離排序的LinkedHashMap,但我沒有看到太多意義。
Map<Double, List<Vertex>> map = new LinkedHashMap<>();
//...
map = map.entrySet().stream()
.sorted(Map.Entry.comparingByKey())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
喜Zildyan謝謝...-我的要求是Dijkstra的一樣。在迭代中選擇最小距離頂點,並且放寬所選擇的頂點的所有輸出邊以找到頂點的新距離。我想避免排序,因爲我覺得這個要求在計算上花費很大。 – pkumar
這可能有助於https://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html – cjungel