2012-02-07 24 views
34

Me encontré con muchas declaraciones como comparable se usa cuando se requiere un orden natural al ordenar una matriz o colección y comparador para el total de pedidos.diferencia entre ordenamiento natural y ordenamiento total

La versión de lo que ha escuchado puede ser igual o diferente con el mismo significado, pero en última instancia es uno de los factores distintivos entre los dos (comparador y interfaces comparables).

Pero, en ninguna parte pude encontrar una diferencia entre los dos tipos de pedidos. Si alguien puede explicarlo con un buen ejemplo, será muy apreciado :)

Respuesta

25

Total ordering significa que todos los valores se pueden comparar con todos los demás valores. Por ejemplo, si tiene una colección de BigDecimal y String no existe un orden total natural (pero podría inventar uno)

En Java, el orden Natural se define como el orden proporcionado por la JVM. Esto podría no coincidir con lo que una gente podría creer que es el orden natural. p.ej. Las cadenas se ordenan ASCIIbetically. es decir, Z viene antes a y 10 es antes 2

http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html

Esta interfaz impone un orden total sobre los objetos de cada clase que lo implementa. Este orden se conoce como el orden natural de la clase, y el método compareTo de la clase se conoce como su método de comparación natural.

+2

¿Qué quiere decir exactamente con ** todos los valores se pueden comparar con todos los demás valores. ** ¿Puede dar más información sobre esto? – AnV

+1

@AbhinavVutukuri en la colección puede decir que algunos son comparables y otros no. Todos los valores tienen que ser comparables a cualquier otro valor. –

4

Natural ordering es un total ordenado por defecto. Esta es la única diferencia entre los dos.

+1

Eso es lo que no obtuve. Es como un enigma para mí. ¿Puedes explicar lo que quieres decir con ordenar por defecto – Nav

+0

es _natural_: D – UmNyobe

+0

lol lo sé, pero como he dicho no entendí bien cuando dijiste causa natural el significado es ambiguo de entender para mí :( – Nav

8

Total ordering es un concepto matemático general. Se diferencia principalmente de ordenación parcial porque para cada un y b en conjunto X, ya sea "un < = b" o "b < = a" son significativos y verdadero. En lo que respecta a Java, esto significa que de dos instancias Comparable, una debe ser mayor o igual que la otra (es decir, tiene sentido compararlas).

9

orden natural

Depende de nuestras colecciones que utilizamos, por ejemplo, por ejemplo, hemos objetar caracteres, entonces el orden natural, es decir sus valores Unicode, para los números de orden natural es, como de costumbre, orden creciente

Interface comparable- Esta interfaz impone un orden total en los objetos de cada clase que lo implementa. Este orden se conoce como el orden natural de la clase, y el método compareTo de la clase se conoce como su método de comparación natural.

Las listas (y las matrices) de los objetos que implementan esta interfaz se pueden ordenar automáticamente por Collections.sort (y Arrays.sort). Los objetos que implementan esta interfaz se pueden usar como claves en un mapa ordenado o elementos en un conjunto ordenado, sin la necesidad de especificar un comparador.

public interface Comparable<T> { 

    /** 
    * Compares this object with the specified object for order. Returns a 
    * negative integer, zero, or a positive integer as this object is less 
    * than, equal to, or greater than the specified object. 
    */ 
    public int compareTo(T o); 
} 

Interface Comparador:

Esta interfaz representa una relación de orden, que puede ser usado para ordenar una lista o mantener el orden en un conjunto ordenado o mapa. Puede anular el orden natural de un tipo u ordenar objetos de un tipo que no implemente la interfaz Comparable.

Una función de comparación, que impone un orden total en "alguna colección de objetos". Los comparadores se pueden pasar a un método de clasificación (como Collections.sort) para permitir un control preciso sobre el orden de clasificación. Los comparadores también se pueden usar para controlar el orden de ciertas estructuras de datos (como TreeSet o TreeMap).

public interface Comparator<T> { 
    /** 
    * Compares its two arguments for order. Returns a negative integer, 
    * zero, or a positive integer as the first argument is less than, equal 
    * to, or greater than the second. 
    */ 
    int compare(T o1, T o2); 

    boolean equals(Object obj); 
} 

Hope This helps you.      
6

punto importante:naturales pedido debe ser consistente con es igual a!

Resumen: ordenamiento natural es un tipo de orden total que es por defecto (se usa con más frecuencia) para la clase dada y es consistente con los iguales. La ordenación total es cualquier orden en la que todos los valores se pueden comparar con todos los demás valores.

p. cuando diseña una nueva clase, entonces puede elegir el orden natural dentro de la clase. Cualquier otro pedido puede ser entonces sólo el total de uno;)

+1

¿Qué quiere decir exactamente con ** todos los valores se pueden comparar con todos los demás valores. ** ¿Puede dar más información sobre esto? – AnV

2

elaborar en @ respuesta de Bruno: un ejemplo de una ordenación parciales la relación divisibilidad entre números positivos. Si compara 5 y 15, puede decir que 5 es un divisor de 15 y 15 es el múltiplo de 5. Sin embargo, 3 y 5 no son comparables porque 3 no es el divisor ni el múltiplo de 5.

Un ejemplo de orden total es menor que la relación, porque si toma dos números diferentes, uno de ellos es menor que el otro. Entonces cualquier valor es comparable con cualquier otro valor.

En el concepto de natural ordering: Si los objetos de un tipo tienen una forma muy obvia de ser ordenados, que es el orden natural. Por ejemplo, el orden natural de Strings es el orden alfabético, y el orden natural de los números es de orden ascendente, porque es la primera opción que cualquiera podría pensar. Sin embargo, a veces desearía ordenar cadenas de una manera diferente, p. clasificando por longitud desde los de 1 carácter a los más largos. Este es un posible ordenamiento total en Strings, pero no el natural.

No todos los objetos tienen necesariamente un orden natural. P.ej. si tiene objetos Persona, ordenarlos por altura es un posible ordenamiento total, pero también lo es ordenarlos por edad ... Ninguno de estos es más obvio que el otro, es por eso que no existe un orden natural.

Cuestiones relacionadas