2016-11-23 129 views
-1

我有一個HashMap中,其關鍵是距離和值是ArrayList中包含基於其在特定的距離(即密鑰)優先級隊列的ArrayList HashMap的

我要讓HashMap中的優先級隊列的頂點列表(優先級在鍵上)來獲得一次處於特定距離的所有頂點。

是否有可能使這樣的優先級隊列(無界的)? 任何人都可以幫忙嗎?

+0

這可能有助於https://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html – cjungel

回答

1

您可以使用class來封裝距離和頂點。實現Comparable接口或通過Comparator對象時,您將newPriorityQueue。你可以這樣做以下...

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<>(); 

} 
0

的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)); 
+0

喜Zildyan謝謝...-我的要求是Dijkstra的一樣。在迭代中選擇最小距離頂點,並且放寬所選擇的頂點的所有輸出邊以找到頂點的新距離。我想避免排序,因爲我覺得這個要求在計算上花費很大。 – pkumar