2012-09-12 15 views
19

Sé que comparar y compareTo devuelve un valor de int.¿cómo se compara y se compara el trabajo?

Por ejemplo:

Returns 
0 if a equal b 
-1 if a < b 
+1 if a > b 

sort método hace una llamada a cualquiera de compareTo o compare() métodos. Pero ¿cómo el método sort organiza el list cuando se compara o compareTo devuelve un valor de int. ? ¿Cuál es el fondo escenario en ejecución después de compare o compareTo devuelve un valor int para ordenar cómo lo hace sort método hace uso de valores int (-1 o 0 o 1) regresaron a ella desde compare y compareTo

+1

http://en.wikipedia.org/wiki/Sorting_algorithm o si desea especificar java: [TimSort] (http://en.wikipedia.org/wiki/Timsort) – amit

Respuesta

2

Leer this document:

  • a.compareTo(b):
    Interfaz comparable. Compara los valores y devuelve un int que dice si los valores se comparan menos de, igual o mayor que. Si los objetos de su clase tienen un orden natural, implemente la interfaz Comparable y defina este método. Todas las clases de Java que tienen un orden natural implementan esto (String, Double, BigInteger, ...).

  • compare(a, b):
    Interfaz de comparación. Compara los valores de dos objetos. Esto se implementa como parte de la interfaz del Comparador, y el uso típico es definir una o más clases de utilidad pequeñas que implementan esto, para pasar a métodos como sort() o para usar clasificando estructuras de datos como TreeMap y TreeSet. Es posible que desee crear un objeto Comparator para lo siguiente:

    • Comparaciones múltiples. Para proporcionar varias formas diferentes de ordenar algo. Por ejemplo, es posible que desee ordenar una clase Person por nombre, ID, edad, altura, ... Definiría un Comparador para cada uno de estos para pasar al método sort().
    • Clase del sistema Proporcionar métodos de comparación para las clases sobre las que no tiene control. Por ejemplo, podría definir un Comparador para cadenas que las comparó por longitud.
    • patrón de estrategia para implementar un modelo de estrategia, que es una situación en la que se desea representar un algoritmo como un objeto que se puede pasar como parámetro, salvo en una estructura de datos, etc.
4

Los algoritmos de clasificación de casos generales se basan en comparaciones. Si compara entre a y b, hay exactamente 3 posibilidades: a == b, a > b, a < b.

El método compare() o compareTo() proporciona exactamente esta información.

Ahora, para utilizar esta información hemos diseñado numerosos sorting algorithms, comenzando con ingenuo bubble sort, y algunos son más avances como quick sort. Cada uno proporciona un enfoque un poco diferente al problema de clasificación.

Java eligió el algoritmo TimSort para su implementación de clasificación.

Como ejercicio, puede diseñar su propio algoritmo de clasificación . ¿Puedes encontrar el elemento máximo de una matriz usando el método compare()? cuando lo encontraste donde debería estar? ¿Que deberías hacer después?


(1) Bueno, piensa en él por sí mismo, sino que ya existe, en realidad :)

18

Si los dos elementos (a, b) que se comparan ya están en el orden correcto, y compare(a, b)a.compareTo(b) ambos devuelven un valor que es <= 0, por lo que no tiene que pasar nada.

Si no están en el orden correcto, el valor devuelto es > 0, lo que indica que deben intercambiarse.

+6

+1 La mejor respuesta IMO, teniendo en cuenta que * en realidad * respondió la pregunta del OP en lugar de simplemente copiar y pegar documentos. –

Cuestiones relacionadas