【发布时间】:2014-04-07 11:27:15
【问题描述】:
我有一个 PriorityQueue 的车辆,其中有一件物品订购不正确。我认为我的 compareTo 中有些东西很奇怪,但我一直没能找到它。
public class Vehicle implements Comparable<Vehicle> {
private int id;
private Calendar queueTime;
private int type;
private int size;
}
@Override
public int compareTo(Vehicle vehicle) {
if (this.getType() == vehicle.getType()) {
if (this.getSize() == vehice.getSize()) {
return (this.queueTime.compareTo(vehicle.queueTime));
} else if (this.getSize().compareTo(vehicle.getSize()) > 0) {
return -1;
} else {
return 1;
}
} else if (this.getType().compareTo(vehicle.getType()) > 0) {
return -1;
} else {
return 1;
}
}
我有一个主类,它创建 PriorityQueue,创建一堆 Vehicle 对象,然后将它们添加到队列中。
Queue<Vehicle> currentQueue = new PriorityQueue<Vehicle>();
Vehicle smallPass1 = new Vehicle(1, Calendar.getInstance(), 1, 0);
Vehicle smallCargo1 = new Vehicle(2, Calendar.getInstance(), 0, 0);
Vehicle largePass1 = new Vehicle(3, Calendar.getInstance(), 1, 1);
Vehicle largeCargo1 = new Vehicle(4, Calendar.getInstance(), 0, 1);
Vehicle smallPass2 = new Vehicle(5, Calendar.getInstance(), 1, 0);
Vehicle smallCargo2 = new Vehicle(6, Calendar.getInstance(), 0, 0);
Vehicle largePass2 = new Vehicle(7, Calendar.getInstance(), 1, 1);
Vehicle largeCargo2 = new Vehicle(8, Calendar.getInstance(), 0, 1);
我期待这个输出:
Queue is: [
Vehicle [id=3, queueTime=1396824774459],
Vehicle [id=7, queueTime=1396824774459],
Vehicle [id=5, queueTime=1396824774459],
Vehicle [id=1, queueTime=1396824774458],
Vehicle [id=8, queueTime=1396824774459],
Vehicle [id=4, queueTime=1396824774459],
Vehicle [id=2, queueTime=1396824774459],
Vehicle [id=6, queueTime=1396824774459]]
但我得到了这个:
Queue is: [
Vehicle [id=3, queueTime=1396824774459],
Vehicle [id=7, queueTime=1396824774459],
Vehicle [id=8, queueTime=1396824774459],
Vehicle [id=5, queueTime=1396824774459],
Vehicle [id=1, queueTime=1396824774458],
Vehicle [id=2, queueTime=1396824774459],
Vehicle [id=4, queueTime=1396824774459],
Vehicle [id=6, queueTime=1396824774459]]
【问题讨论】:
-
如何设置优先级?队列有它自己的优先级,与
compareTo诱导的不同。 -
@DavidWallace:我不同意。如果没有使用 Comparator,则自然顺序 实际上用于确定优先级或顺序。
-
你是怎么得到这个输出的?如果您不从 PQ 中删除项目,您将不会得到它的订单。请参阅 Javadoc。
-
@DavidWallace 不,它没有。 PriorityQueue 没有“自己的优先级”。它具有 Comparator 或 Comparable 所提供的内容。
-
是的,但是 OP 没有向我们展示队列是如何创建的。不过,大概他们没有提供
Comparator- 否则他们会在这里展示它。所以我收回我的言论。这个compareTo很重要。
标签: java