我有一个Java PriorityQueue用于从我创建的称为Node的特定类中排序对象。我希望它通过节点的getData()方法对节点进行排序。我尝试了以下代码(使用比较器),但它不起作用。当我调用优先级队列的"poll"方法时,它并没有首先返回最低的结果,而是以一种看似随机的顺序返回。我怎么修理它?谢谢!
PriorityQueue<Node> pq = new PriorityQueue<Node>(hm.size(),
new Comparator<Node>( ) {
// override the compare method
public int compare(Node i, Node j) {
if (i.getData()<j.getData()){
return i.getData(); //It should sort by the Node's getData method.
}
return j.getData();
比较器需要返回-1(负数)、0或+1(正数),这取决于第一个操作数是小于、等于还是大于第二个操作数。您正在返回数据本身,它不会做您想要的。
重写比较方法:
public int compare(Node i, Node j) {
return i.getData() - j.getData()
}
这将遵循比较方法的要求,根据比较结果返回小于、等于或大于零的值。