Java 比较法违反其总合同!优先级队列错误
我有一个优先级队列,它在线程内的whiletrue循环中被操纵。在某些情况下,我希望获取队列内容并在数组中对其排序。 我是这样做的:Java 比较法违反其总合同!优先级队列错误,java,multithreading,priority-queue,Java,Multithreading,Priority Queue,我有一个优先级队列,它在线程内的whiletrue循环中被操纵。在某些情况下,我希望获取队列内容并在数组中对其排序。 我是这样做的: Object[] array = sellQueues[0].toArray(); Arrays.sort(array); 此优先级队列的比较方法如下所示: public int compare(Order o1, Order o2) { try { if (o1.getBroker().getOrders
Object[] array = sellQueues[0].toArray();
Arrays.sort(array);
此优先级队列的比较方法如下所示:
public int compare(Order o1, Order o2) {
try {
if (o1.getBroker().getOrdersPriority() > o2.getBroker().getOrdersPriority())
return 1;
else if (o1.getBroker().getOrdersPriority() < o2.getBroker().getOrdersPriority())
return -1;
else {
if (o1.getBeginDate().before(o2.getBeginDate()))
return 1;
else if (o1.getBeginDate().after(o2.getBeginDate()))
return -1;
else {
if (o1.getBeginTime().before(o2.getBeginTime()))
return 1;
else if (o1.getBeginTime().before(o2.getBeginTime()))
return -1;
else
return 0;
}
}
} catch (NullPointerException e) {
return 0;
}
}
出于某种原因,有时我会出现以下错误:
java.lang.IllegalArgumentException:比较方法违反了其
总合同
比较国的实施违反了其总合同,因为: 假设订单A、B、C有相同的经纪人,A有空的开始日期,B有开始日期 2017年1月1日和C已于2018年1月1日开始。然后 A等于B,A等于C。 通过比较器,B大于C 因此2与1相矛盾
要更正实现,请删除捕捉NullPointerException的坏习惯以捕捉RunTimeException,添加方法以比较Order的属性,并定义null的一致性比较。由于某些原因,有时会出现错误。。。。我们如何帮助处理这样一个描述性的信息呢???我的眼睛在动吗,或者比较o1.getBeginTime的else也在做同样的事情。在if和else if中,if.e.不应该是a.after吗?@KevinO,是的,谢谢,太累了。。