2016-11-23 3 views
-1

Ich habe eine HashMap, dessen Schlüssel Abstand und Wert ist Arraylist, die eine Liste von Scheitelpunkten enthält, die in einem bestimmten Abstand (dh key)Priority Queue Arraylist HashMap

I Priority Queue von HashMap (Priorität machen wollen basierend auf Tasten), um alle Scheitelpunkte zu erhalten, die sich jeweils in einer bestimmten Entfernung befinden.

ist es möglich, solche Priorität Warteschlange (unbegrenzte) zu machen? Könnte jemand bitte helfen?

+0

Dies könnte helfen https://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html – cjungel

Antwort

1

Sie können die Klasse zum Einkapseln der Entfernung und der Scheitelpunkte verwenden. Implementiert die Comparable Schnittstelle oder übergeben Sie das Comparator Objekt, wenn Sie new die PriorityQueue. Sie können diese folgendes tun ...

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 unbeschränkt ist und es auf die Anzahl der Elemente in der Warteschlange dynamisch basierend wächst. Es hat zu jedem Zeitpunkt interne Kapazität und erhöht sich, wenn die Elemente hinzugefügt werden.

Aber ich sehe nicht viel Sinn bei der Umwandlung in PriorityQueue, wenn Sie möchten, dass Ihre Karte nach Schlüssel, d. H. Entfernungen sortiert dann verwenden Sie LinkedHashMap, die nach Entfernungen sortiert ist.

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

hallo Zildyan Danke ...- meine Forderung ist Dijkstra wie. In einer Iteration wird der min-distance-Vertex ausgewählt und alle ausgehenden Kanten des selektierten Vertex werden entspannt, um neue Abstände von Vertices zu finden. Ich möchte die Sortierung vermeiden, da ich es für diese Anforderung rechnerisch teuer finde. – pkumar

Verwandte Themen