我在使用 PriorityQueues 时遇到问题,因为我相信它按优先级排序,但是我不确定优先级是什么(我的意思是值是什么以及它来自哪里)。可以使用构造函数中的比较器创建 priorityQueue,我已经尝试过了,但它不起作用。
队列类:
public JavaPriorityFlightQueue() {
super();
flights = new PriorityQueue(5, new SortQueueViaPriority());
}
比较器:
import java.util.Comparator;
public class SortQueueViaPriority implements Comparator {
public int compare(Object o1, Object o2){
Flight f1 = (Flight) o1;
Flight f2 = (Flight) o2;
if( f1 == null || f2 == null ){
if( f1 == f2 ) return 0;
else if( f2 == null) return +1;
else return -1;
}
Integer i1 = (Integer) f1.getPriority();
Integer i2 = (Integer) f2.getPriority();
return i2.compareTo(i1);
}
}
优先级是一个 int 值,它是航班类别的一部分。我测试这个。
JavaPriorityFlightQueue flightQueue = new JavaPriorityFlightQueue();
Flight flight1 = new Flight("0001",9);
Flight flight2 = new Flight("0002",7);
Flight flight3 = new Flight("0003",1);
Flight flight4 = new Flight("0004",2);
Flight flight5 = new Flight("0005",1);
但是 PriorityQueue 没有排序,当我检查它时,值 9 永远不会与任何东西进行比较,结果是没有任何东西被排序。比较类 SortQueueViaPriority 是从该类完美排序的另一个类复制和粘贴的。