我有一个Vehicles的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
方法可能正常工作。请注意API关于它的说明:
此类及其迭代器实现Collection和Iterator接口的所有可选方法。 不保证 方法iterator()中提供的Iterator
以任何特定顺序遍历优先级队列的元素 。如果需要有序遍历,请考虑使用Arrays.sort(pq.toArray())。
当您通过操作poll,remove,peek和element从队列中检索项目时,顺序很明显。
问题内容: 我有一个与数据库对话的servlet,然后返回一个有序(按时间排序)对象的列表。在servlet部分,我有 从日志中,我可以看到数据库以正确的顺序返回了User对象。 在前端,我有 但是顺序改变了。 我只在返回的列表很大(超过130个用户)时才注意到这一点。 我尝试使用Firebug进行调试,Firebug中的“响应选项卡”显示列表的顺序与servlet中的日志不同。 我做错了什么吗?
我是Flink的新手,我试图理解Flink是如何在其的并行抽象中命令调用。考虑这个产生部分和的流的例子: 我希望它的输出是流:。事实上,就在这里。 是否可以安全地假设这种情况始终存在,尤其是在从具有大量并行性的源读取数据时?
问题内容: 在Java中,是否有一个对象的作用类似于用于存储和访问键/值对的Map,但是可以返回键的有序列表和值的有序列表,从而使键和值列表的顺序相同? 因此,按照代码进行解释,我正在寻找某种行为,就像我的虚拟OrderedMap: 问题答案: 该SortedMap的接口(与实施TreeMap的)应该是你的朋友。 该接口具有以下方法: keySet() 它以升序返回一组键 values() 它以对
问题内容: 是否可以对第一个查询进行排序并保留返回的行作为第一行,而不对第二个查询进行排序。(如果有道理) 我当前查询的一个示例是: 我希望“苹果”类别下的设备将按照该列表的顺序进行组织,并位于其他设备上方的列表顶部。但这似乎使两个查询混杂在一起。 问题答案: 您需要引入一个人工排序键。就像是:
订购可以看作是一个丰富的比较器,具有增强的链接功能,多种实用方法,多种类型的排序功能等。 Class 声明 (Class Declaration) 以下是com.google.common.collect.Ordering《T》类的声明 - @GwtCompatible public abstract class Ordering<T> extends Object implem
我是新的数据流和发布子工具在GCP。 需要将prem过程中的电流迁移到GCP。 当前流程如下: 我们有两种类型的数据馈送 Full Feed–其adhoc作业–完整XML的大小约为100GB(单个XML–非常复杂的一个–完整的数据–ETL作业处理此XML并将其加载到约60个表中) 单独的ETL作业用于处理完整提要。ETL作业过程完全馈送并创建负载就绪文件,所有表将被截断并重新加载 源系统每30分钟