0
スレッド内でwhileループを処理する優先度キューがあります。いくつかのケースでは、私はキューの内容を取り、それを配列でソートする必要があります。 私はそれをこのように実行します。比較方法は一般契約に違反しています!優先度キューでエラーが発生しました
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'と比較するelseです(つまり、 .after() ')? – KevinO
@KevinO、はい、ありがとう、あまりにもこのために疲れて.. – kitsuneFox