【发布时间】:2017-05-08 07:06:25
【问题描述】:
我有一个优先级队列,它在线程内的 while(true) 循环中进行操作。在某些情况下,我想获取队列内容并将其排序到数组中。 我是这样做的:
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:比较方法违反了它的 总承包!
【问题讨论】:
-
出于某种原因,有时我会收到错误消息....我们如何才能提供这样的描述性信息???
-
我的眼睛是在走,还是在比较
o1.getBeginTime()在if和else if中做同样的.before的其他人(即,其中一个不应该是.after())?
标签: java multithreading priority-queue