Mic*_*son 5 java priority-queue comparator
我编写了一个自定义比较器来比较我的节点类,但是java优先级队列没有以正确的顺序返回我的项目.
这是我的比较器:
public int compare(Node n1, Node n2){
if (n1.getF() > n2.getF()){
return +1;
}
else if (n1.getF() < n2.getF()){
return -1;
}
else { // equal
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
其中getF返回一个double.但是,在将多个节点插入优先级队列后,我将其打印出来:
while(open.size() > 0) {
Node t = (Node)(open.remove());
System.out.println(t.getF());
}
Run Code Online (Sandbox Code Playgroud)
结果如下:
6.830951894845301
6.830951894845301
6.0
6.0
5.242640687119285
7.4031242374328485
7.4031242374328485
8.071067811865476
Run Code Online (Sandbox Code Playgroud)
任何想法为什么会这样?我的比较器错了吗?谢谢.
麦克风
Cei*_*ish 10
你是如何打印出这些价值的?我不认为迭代器PriorityQueue提供与整个类相同的排序保证,所以如果你正在做的话
for(Node n : queue) {
System.out.println(n.getF());
}
Run Code Online (Sandbox Code Playgroud)
你会得到无序的输出.排序保证仅适用于offer,take,poll,peek,可能还有一些其他的方法.
有关优先级队列的javadocs中的迭代器的特别提及http://java.sun.com/javase/6/docs/api/java/util/PriorityQueue.html
| 归档时间: |
|
| 查看次数: |
9894 次 |
| 最近记录: |