Java 比较法违反其总合同!优先级队列错误

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

我有一个优先级队列,它在线程内的whiletrue循环中被操纵。在某些情况下,我希望获取队列内容并在数组中对其排序。 我是这样做的:

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,是的,谢谢,太累了。。