PriorityQueuesに問題があります。これは、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は、クラスが完全にソートされる別のクラスからコピーして貼り付けられます。