cuestión comparador de Java cuando se pasa a Collections.sort

Ashutosh Jha:

Cuando se prueba con menos carga en locales que funcionaba bien.

private static class CoordinateComparator implements Comparator<Coordinate> {

    @Override
    public int compare(Coordinate o1, Coordinate o2) {
        return o1.x <= o2.x ? -1 : 1;
    }

}

Aquí x es primitivo y que estaba dando error de ejecución cuando se llevaron a cabo las pruebas. Bajo carga pesada que se rompía.

Luego cambié comparador para: -

private static class CoordinateComparator implements Comparator<Coordinate> {

    @Override
    public int compare(Coordinate o1, Coordinate o2) {
        return o1.x.compareTo(o2.x);
    }

}

En este caso x es un número entero. Entonces empezó a trabajar muy bien. Cualquier ideas o pensamientos por qué estaba ocurriendo. Yo estaba pasando este comparador a Collections.sort (array, comp)

Eran :

public static <T> void sort(List<T> list, Comparator<? super T> c)arrojaría IllegalArgumentExceptionsi se encuentra el comparador de violar el Comparatorcontrato.

En su código, el primer comparemétodo es inconsistente para el caso en que o1.xsea igual o2.x. Se volverá o bien -1 o 1 dependiendo del orden en el que se comparan las instancias. Debe devolver 0 en este caso.

Lo puede solucionar de la siguiente manera:

public int compare(Coordinate o1, Coordinate o2) {
    return o1.x < o2.x ? -1 : o1.x > o2.x ? 1 : 0;
}

A pesar de su o1.x.compareTo(o2.x)alternativa parece más limpio para mí.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=318641&siteId=1
Recomendado
Clasificación