0
我有一個優先級隊列,在一個線程內的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: Comparison method violates its general contract!
***出於某種原因,有時我得到錯誤.... ***我們如何能夠幫助這樣的描述性信息? –
我的眼睛正在發展,還是比較'o1.getBeginTime()'在'if'和'else if'中做同樣的'.before'的其他東西(也就是說,不應該是' 。經過()')? – KevinO
@KevinO,是的,謝謝,太累了.. – kitsuneFox