2016-11-23 15 views
-1

私が鍵となり、距離と値が特定の距離(すなわちキー)にある頂点のリストが含まれているのArrayListであるHashMapを持って優先キューのArrayList HashMapの

私はHashMapののプライオリティキューを作りたい(優先順位に基づきますキーを使用して)一度に特定の距離にあるすべての頂点を取得します。

Queue(無制限)を優先することは可能ですか? 誰でも助けてくれますか?

+0

これは私の要件は、のようなダイクストラのある...- https://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html – cjungel

答えて

1

クラスを使用すると、距離と頂点をカプセル化できます。 Comparableインターフェイスを実装するか、newPriorityQueueになるとComparatorオブジェクトを渡します。あなたはこの次...

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

優先度つきキューは無制限であり、それがキュー内の要素の数に基づいて動的に拡張を行うことができます。これはいつでも内部容量を持ち、要素が追加されると増加します。

しかし、マップをキー(距離)でソートし、距離でソートされたLinkedHashMapを使用したい場合、PriorityQueueに変換するのはあまり意味がありません。

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ありがとう役立つかもしれません。反復最小距離の頂点が選択され、選択された頂点のすべての出て行くエッジは、新しい距離の頂点を見つけるために緩和される。私はこの要件のために計算上高価だと感じているので、これをソートしないようにしたい。 – pkumar

関連する問題