我正在尝试从localNodes获得距离哈希图距离最小的Node。更改距离哈希图中的任何值时出现的问题是,队列未重新排序,我认为问题是因为我阻碍了将作为内部类的比较器接口,并迫使我将哈希图声明为final。
有什么不同的方法吗?
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) );
}
});
最佳答案
您不能更改已经在诸如PriorityQueue
或SortedSet
之类的已排序集合中并且期望它们在该集合中位置的元素的相对顺序(在这种情况下,通过更改它们映射到的距离值)结果是。一方面,数据结构并不是为此而建立的。另外,在您的示例中,不会将您对PriorityQueue
所做的任何更改通知HashMap
,因此即使它被设计为也不会对此做出响应。
我不知道您如何使用此队列,但是一个可行的解决方案是将节点仅存储在HashMap
中,并在每次更改PriorityQueue
时创建一个新的HashMap
。新创建的队列将具有正确的顺序。
关于java - PriorityQueue和比较器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7941702/