He visto clases que implementan Comparable y Comparator . ¿Qué significa esto? ¿Por qué usaría uno sobre el otro?
java
comparator
comparable
Nick Heiner
fuente
fuente
Respuestas:
El siguiente texto proviene de Comparador vs Comparable
Comparable
Un objeto comparable es capaz de compararse con otro objeto. La clase misma debe implementar la
java.lang.Comparable
interfaz para poder comparar sus instancias.Comparador
Un objeto de comparación es capaz de comparar dos objetos diferentes. La clase no compara sus instancias, sino las instancias de otras clases. Esta clase de comparación debe implementar la
java.util.Comparator
interfaz.fuente
Implementar
Comparable
significa " puedo compararme con otro objeto " . Esto suele ser útil cuando hay una única comparación natural por defecto.Implementar
Comparator
significa " puedo comparar otros dos objetos " . Esto suele ser útil cuando hay múltiples formas de comparar dos instancias de un tipo, por ejemplo, podría comparar personas por edad, nombre, etc.fuente
Person
implementoComparable
, porque no puede cambiar cómo se comparan dos personas.Person
. 2) El comparador, por ejemplo,PersonAgeComparator
que es capaz de comparar dos entidades diferentes y decidir cuál debe venir primero en ese orden de clasificación particular. 3) El código de clasificación, que toma una colección de entidades y un comparador, y clasifica esa colección usando el comparador para determinar el orden.Comparable permite que una clase implemente su propia comparación:
En comparación, Comparator es una comparación externa:
En ambas implementaciones, aún puede elegir lo que desea comparar . Con los genéricos, puede declararlo y verificarlo en tiempo de compilación. Esto mejora la seguridad, pero también es un desafío determinar el valor apropiado.
Como guía, generalmente uso la clase o interfaz más general con la que se puede comparar ese objeto, en todos los casos de uso que imagino ... ¡Sin embargo, no es una definición muy precisa! :-(
Comparable<Object>
le permite usarlo en todos los códigos en tiempo de compilación (que es bueno si es necesario, o malo si no y pierde el error en tiempo de compilación); su implementación tiene que hacer frente a los objetos y lanzarlos según sea necesario, pero de manera robusta.Comparable<Itself>
Es muy estricto al contrario.fuente
java.lang.Comparable
Para implementar la
Comparable
interfaz, la clase debe implementar un método únicocompareTo()
int a.compareTo(b)
Debe modificar la clase cuya instancia desea ordenar. Para que solo se pueda crear una secuencia de clasificación por clase.
java.util.Comparator
Para implementar la interfaz Comparator, la clase debe implementar un método único
compare()
int compare (a,b)
fuente
Comparable
es para proporcionar un orden predeterminado en los objetos de datos, por ejemplo, si los objetos de datos tienen un orden natural.A
Comparator
representa el pedido en sí para un uso específico.fuente
Comparable
generalmente se prefiere. Pero a veces una clase ya se implementaComparable
, pero desea ordenar en una propiedad diferente. Entonces te ves obligado a usar aComparator
.Algunas clases en realidad prevén
Comparators
casos comunes; por ejemplo, losString
s distinguen entre mayúsculas y minúsculas cuando se ordenan, pero también hay unaComparator
llamada estáticaCASE_INSENSITIVE_ORDER
.fuente
Aquí hay algunas diferencias entre Comparator y Comparable que encontré en la web:
Si ve que la diferencia lógica entre estos dos es Comparador en Java, compare dos objetos proporcionados a él, mientras que la interfaz Comparable compara "esta" referencia con el objeto especificado.
Comparable en Java se utiliza para implementar el orden natural del objeto. En Java API String, las clases Date y wrapper implementan una interfaz comparable.
Si alguna clase implementa una interfaz comparable en Java, la colección de ese objeto, ya sea List o Array, se puede ordenar automáticamente utilizando el método Collections.sort () o Array.sort () y el objeto se ordenará según el orden natural definido por el método CompareTo.
Los objetos que implementan Comparable en Java se pueden usar como claves en un mapa ordenado o elementos en un conjunto ordenado, por ejemplo TreeSet, sin especificar ningún Comparador.
sitio: ¿Cómo usar Comparator y Comparable en Java? Con el ejemplo
Leer más: ¿Cómo usar Comparator y Comparable en Java? Con el ejemplo
fuente
Comparable
es para objetos con un orden natural. El objeto mismo sabe cómo se debe ordenar.Comparator
es para objetos sin un orden natural o cuando desea utilizar un orden diferente.fuente
Diferencia entre comparador e interfaces comparables
Comparable
se usa para compararse al usar con otro objeto.Comparator
Se utiliza para comparar dos tipos de datos que son objetos.fuente
Si ve que la diferencia lógica entre estos dos está
Comparator
en Java, compare dos objetos proporcionados a él, mientras que laComparable
interfaz compara "esta" referencia con el objeto especificado.Comparable
en Java se usa para implementar el ordenamiento natural del objeto. En Java API String, las clases Date y wrapper implementan laComparable
interfaz.Si alguna clase implementa una
Comparable
interfaz en Java, entonces la colección de ese objeto puedeList
oArray
se puede ordenar automáticamente usandoCollections.sort()
oArray.sort()
método y el objeto se ordenará según el orden natural definido por elcompareTo
método.Los objetos que se implementan
Comparable
en Java pueden usarse como claves en un mapa ordenado o elementos en un conjunto ordenado, por ejemploTreeSet
, sin especificar ningunoComparator
.fuente
Mi lib de anotación para implementar Comparable y Comparator:
Haga clic en el enlace para ver más ejemplos. comparativo
fuente