2011-10-29 5 views
0

ハッシュマップ距離からの距離が最小のノードをlocalNodesから取得しようとしています。問題は距離ハッシュマップの任意の値を変更しているときにキューが並べ替えられていない私は内部クラスとしてハッシュマップを最終的に宣言するように私はコンパイラーのインターフェイスを実装しているので、問題だと思う。 には別の方法があります。PriorityQueueとComparator

final HashMap<Node, Double> distance = new HashMap<>(); 
    PriorityQueue<Node> localNodes = new PriorityQueue<>(10, 
      new Comparator() { 

       @Override 
       public int compare(Object o1, Object o2) { 
        return distance.get((Node)o2).compareTo(distance.get((Node)o2)); 
       } 
      }); 

答えて

4
次のような PriorityQueueSortedSetとは、その中で自分の位置を期待してソートされたコレクションに既にある(、それらがマップされた距離値を変更することで、この場合)の要素の相対的な順序を変更することはできません

その結果として変更するコレクション。一つのこととして、データ構造だけはそのために構築されていません。別の例として、PriorityQueueにはHashMapの変更が通知されないため、そのように設計されていても応答できません。

私はあなたがこのキューを使用しているのか分からないが、一つの可能​​な解決策は自分HashMap内のノードを格納し、あなたがHashMapを変更するたびに新しいPriorityQueueを作成することです。新しく作成されたキューには正しい順序が付けられます。

+0

ええ、あなたは正しいです、+1 – Bozho

+0

私はその原因はここにあります:) –

3

そんなことはできません(Colinの答えを参照)。私は回避策を提案することができます:

public class NodeEntry { 
    private Node node; 
    private Double value; 
} 

そしてPriorityQueue<NodeEntry>を使用します。

はそのように見えるNodeEntryオブジェクトを作成します。しかし、あなたが変更する場合NodeEntryvalue何も変更されません。値が変更されたときにキューの順序を変更することはできません。

関連する問題