簡體   English   中英

傳遞給 Collections.sort 時的 Java 比較器問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM