[英]Java comparator issue when passed to Collections.sort
在本地以較少負載進行測試時,它工作正常。
private static class CoordinateComparator implements Comparator<Coordinate> {
@Override
public int compare(Coordinate o1, Coordinate o2) {
return o1.x <= o2.x ? -1 : 1;
}
}
這里 x 是原始的,它在運行測試時給出運行時錯誤。 在沉重的負荷下,它正在破裂。
然后我將比較器更改為:-
private static class CoordinateComparator implements Comparator<Coordinate> {
@Override
public int compare(Coordinate o1, Coordinate o2) {
return o1.x.compareTo(o2.x);
}
}
在這種情況下,x 是整數。 然后它開始正常工作。 為什么會發生這種情況的任何想法或想法。 我將這個比較器傳遞給 Collections.sort(array, comp)
public static <T> void sort(List<T> list, Comparator<? super T> c)
如果發現比較器違反了Comparator
契約,將會拋出IllegalArgumentException
。
在您的代碼中,第一個compare
方法在o1.x
等於o2.x
的情況下不一致。 根據比較實例的順序,它將返回 -1 或 1。 在這種情況下,它應該返回 0。
您可以按如下方式修復它:
public int compare(Coordinate o1, Coordinate o2) {
return o1.x < o2.x ? -1 : o1.x > o2.x ? 1 : 0;
}
盡管您的o1.x.compareTo(o2.x)
替代方案對我來說似乎更清潔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.