2011-10-29 3 views
0

해시 맵 거리와의 최소 거리가있는 노드를 localNodes에서 가져 오려고합니다. 문제는 거리 hashmap 어떤 대기열이 reordered되지 않습니다 문제를 생각하면 나는 내부 클래스로 될 것이라고 같은 비교기 인터페이스를 구현하고 내가 최종으로 hashmap을 선언하도록 강요하고 있다고 생각합니다. 에는 다른 방법이 있습니다.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
당신은 같은 PriorityQueue 또는 SortedSet 및 그 자신의 위치를 ​​기대 정렬 된 컬렉션 이미 (그들이에지도의 거리 값을 변경하여이 경우) 요소의 상대적 순서를 변경할 수 없습니다

그 결과로 변경 될 수 있습니다. 한 가지로, 데이터 구조는이를 위해 구축되지 않았습니다. 다른 예를 들면, PriorityQueueHashMap에 대한 변경 사항을 통보받지 않으므로 그렇게하도록 설계 되었더라도 응답 할 수 없습니다. 당신이 HashMap을 변경할 때마다

이 큐를 사용하는 방법을 모르겠어요

하지만, 하나의 가능한 해결책은 당신의 HashMap에 노드를 저장하고 새로운 PriorityQueue를 작성하는 것입니다. 새로 작성된 대기열의 순서가 올바로 지정됩니다.

+0

예, 맞습니다. +1 – Bozho

+0

나는 그 원인을 알고 있습니다. :) –

3

그렇게 할 수는 없습니다 (Colin의 답변 참조). 나는 해결 방법을 제안 할 수 있습니다 :

그렇게 보이는 NodeEntry 개체 확인 :

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

을 그리고 PriorityQueue<NodeEntry>를 사용합니다. 그러나 변경하면 NodeEntryvalue는 변경되지 않습니다. 일부 값이 변경되면 큐 순서를 재정렬 할 수 없습니다.

관련 문제