comparable comparator interfaces java
Este tutorial explica el concepto de interfaces comparables y comparativas en Java con ejemplos. También aprenderá sobre las diferencias entre los dos:
Aprendimos todo sobre interfaces en nuestros tutoriales anteriores. Se utiliza una interfaz para declarar métodos abstractos y variables estáticas o finales. De forma predeterminada, los métodos de interfaz son públicos. Desde Java 8, las interfaces también pueden tener definidos métodos estáticos y predeterminados.
Java proporciona varias interfaces integradas que podemos utilizar para realizar diversas operaciones. En este tutorial, discutiremos dos de estas interfaces, es decir, Comparable y Comparator. Se utiliza una interfaz comparable para clasificar objetos de acuerdo con el orden natural. La interfaz del comparador se utiliza para clasificar atributos individuales de varios objetos.
=> Explore la serie de capacitación simple de Java aquí.
Comencemos con una interfaz comparable.
Lo que vas a aprender:
- Interfaz comparable en Java
- Interfaz del comparador en Java
- Diferencia entre comparador Vs comparable
- Conclusión
Interfaz comparable en Java
La interfaz comparable ordena las estructuras de lista como Arrays y ArrayLists que contienen objetos personalizados. Una vez que los objetos de la lista implementan la interfaz Comparable, podemos usar el método Collections.sort () o Arrays.sort () en el caso de las matrices para ordenar el contenido.
Pero cuando tenemos clases personalizadas y necesitamos ordenar sus objetos, entonces tendremos que implementar la interfaz Comparable en esta clase. La interfaz Comparable es parte del java.lang paquete. Esta interfaz tiene un solo método, CompareTo (). Usando una interfaz comparable, podemos clasificar un solo miembro de datos a la vez.
Por ejemplo, si tenemos nombre y edad como campos en nuestra clase, a la vez podemos ordenar los objetos de la clase por nombre o edad. No podemos clasificar simultáneamente por nombre y edad.
Como se explicó anteriormente, podemos implementar la interfaz Comparable en Java al tener una clase personalizada para implementar la interfaz Comparable. La interfaz Comparable solo tiene un método 'compareTo' que debe anularse en la clase para ordenar los objetos personalizados.
Método 'CompareTo'
El método 'compareTo' de la interfaz Comparable se utiliza para comparar el objeto actual con el objeto dado. La sintaxis general del objeto compareTo se proporciona a continuación.
public int compareTo (Objeto obj)
Como se muestra arriba, el método compareTo acepta un objeto como argumento (puede ser cualquier objeto personalizado) y lo compara con el objeto actual usado para invocar este método.
El método compareTo devuelve un valor entero que puede tener uno de los siguientes valores:
- Entero positivo (> 0) => el objeto actual> el parámetro del objeto pasado.
- Negativo (el objeto actual
- Cero (= 0) => el objeto actual y el objeto especificado son iguales.
Podemos usar el método compareTo () para ordenar:
- Objetos de tipo cadena
- Objetos de clase envoltorio
- Objetos personalizados o definidos por el usuario
Ahora implementemos un ejemplo de una interfaz comparable.
Ejemplo de interfaz comparable
El siguiente programa Java implementa una clase Person que contiene el nombre y la edad como campos de miembros. Esta clase implementa una interfaz 'Comparable' que nos permitirá ordenar el objeto de la clase Person.
Tenga en cuenta que, dado que vamos a ordenar los objetos personalizados, debemos anular el método 'compareTo ()' de la interfaz Comparable.
servidor privado de world of warcraft vanilla
Dentro del método compareTo () anulado, comparamos la edad del objeto persona que se pasa con la del objeto actual y, en consecuencia, devolvemos el valor.
A continuación se proporciona un ejemplo de programa Java.
|_+_|Producción:
Como se ve en el resultado, usamos una interfaz Comparable para comparar dos objetos de la clase Person según la variable del miembro de edad.
Entonces, como sugiere el nombre, una interfaz comparable nos permite comparar un objeto con el otro siempre que los objetos sean del mismo tipo. Siempre que los objetos sepan organizarse por sí mismos, podemos ordenar los objetos fácilmente utilizando el único método 'compareTo ()' que pertenece a esta interfaz.
Método Java String CompareTo ()
También podemos usar el método compareTo () para comparar dos objetos de tipo String en Java. Los dos objetos de cadena se comparan lexicográficamente convirtiendo cada carácter del objeto de cadena en su carácter Unicode equivalente.
Si dos cadenas son iguales, se devuelve 0. Si el primer objeto es mayor que el segundo objeto, se devuelve un valor positivo y un valor negativo si el primer objeto de cadena es menor que el segundo objeto de cadena.
Por ejemplo,
string1.compareTo (string2) comparará string1 y string 2 lexicográficamente.
|_+_|Producción:
En el programa anterior, vimos cómo usar el método compareTo () para comparar dos cadenas. Antes de eso, usamos el método compareTo () para comparar los valores enteros (edad, por ejemplo). De manera similar, podemos usar los otros tipos de datos como dobles con el método compareTo ().
Pasemos ahora a la interfaz Comparator en Java.
Interfaz del comparador en Java
Ya hemos visto el funcionamiento de la interfaz Comparable. La interfaz comparable nos permite ordenar objetos personalizados basados en un solo miembro de datos. Pero cuando surge el requisito de ordenar el objeto en función de varios campos o miembros de datos, podemos optar por una interfaz de comparación.
Usando la interfaz del Comparador, podemos crear más de un comparador dependiendo de cuántos campos queramos usar para ordenar los objetos personalizados. Usando la interfaz del comparador, suponiendo que deseamos ordenar el objeto personalizado en dos campos de miembros, nombre y edad, entonces necesitamos tener dos comparadores, uno para el nombre y otro para la edad.
Entonces podemos llamar al método Collections.sort () con estos Comparadores.
Entonces, ¿cómo podemos escribir exactamente los comparadores?
Considere un ejemplo de un alumno de clase con el nombre y la edad como campo. Considere que queremos ordenar los objetos Student por campos de nombre y edad.
Para ello, primero tendremos que escribir Clases Comparator, StudentAgeComparator y StudenNameComparator. En estas clases, anularemos el método compare () de la interfaz Comparator, y luego llamaremos al método Collections.sort usando cada uno de estos comparadores para ordenar los objetos de los estudiantes.
La interfaz del comparador contiene un objeto 'comparar' que se utiliza para comparar objetos de dos clases diferentes. La sintaxis general del método de comparación es:
public int compare (Objeto obj1, Objeto obj2);
El método de comparación compara obj1 con obj2.
La interfaz del comparador es parte del java.util paquete y aparte del método de comparación; también contiene otro método llamado equals.
Ejemplo de comparador de Java
Implementemos un ejemplo de Comparator en Java. Nuevamente hemos tomado una clase de Estudiante con el nombre y la edad como miembros de sus datos. Luego definimos una clase de comparación AgeComparator que anula el método de comparación para comparar las edades de dos estudiantes y devolver los valores apropiados.
En el método principal, construimos una Arraylist de objetos Student. Luego llamamos al método Collections.sort con ArrayList y el objeto AgeComparator como argumentos. Esto ordena los objetos Student según la edad.
El programa Java que implementa este escenario se muestra a continuación.
|_+_|Producción:
En el programa anterior, similar a la forma en que escribimos AgeComparator para ordenar los objetos Student según la edad, también podemos escribir otro NameComparator para ordenar los objetos Student según el campo de nombre.
De esta forma podemos tener tantas clases de Comparador como sean necesarias para ordenar objetos en varios campos. De la forma en que comparamos dos variables int, también podemos comparar variables de los otros tipos de datos utilizando el método Compare.
Diferencia entre comparador Vs comparable
Interfaz comparable | Interfaz del comparador |
---|---|
Utiliza Collections.sort (Lista) para ordenar elementos. | Utiliza Collections.sort (Lista, Comparador) para ordenar los elementos. |
La interfaz comparable proporciona clasificación de un solo campo. | La interfaz del comparador proporciona una clasificación de múltiples campos. |
La interfaz comparable clasifica el objeto según el orden natural. | La interfaz del comparador ordena varios atributos de diferentes objetos. |
Usando una interfaz comparable, podemos comparar el objeto actual 'esto' con el objeto especificado. | Usando una interfaz de comparación, podemos comparar objetos de diferentes clases. |
Parte del paquete java.lang. | Parte del paquete java.util. |
El uso de una interfaz comparable modifica la clase real. | El comparador no altera la clase original. |
Proporciona el método compareTo () para ordenar elementos. | Proporciona el método compare () para ordenar elementos. |
Preguntas frecuentes
P # 1) ¿Es comparable una interfaz funcional?
Responder: Sí, comparable es una interfaz funcional. Declara un único método abstracto, compareTo ().
P # 2) ¿Cómo se puede comparar una clase?
Responder: Hacemos una clase comparable implementando la interfaz Comparable. Dentro de la clase, anulamos el método compareTo () para ordenar el objeto. Pasamos un objeto y lo comparamos con el objeto actual.
El método compareTo () devuelve 0 si dos objetos son iguales. Devuelve un número negativo si el primer objeto es menor que el segundo y positivo si el primer objeto es mayor que el segundo.
P # 3) ¿Cuál es el propósito principal de la interfaz del comparador?
Responder: La interfaz del comparador se utiliza principalmente para clasificar los objetos personalizados. También se puede utilizar una interfaz de comparación para comparar objetos de diferentes clases. Además, la interfaz del comparador se puede utilizar para clasificar objetos en varios campos.
P # 4) ¿Por qué se usa Comparator en Java?
Responder: La interfaz del comparador se usa principalmente cuando queremos un orden de clasificación diferente para nuestros objetos personalizados que no sea el orden natural basado en múltiples campos.
P # 5) ¿Qué implementa la interfaz Comparable?
Responder: Todas las clases contenedoras y la clase String implementan una interfaz comparable. Los objetos personalizados también utilizan la interfaz comparable para clasificar.
Conclusión
En este tutorial, hemos analizado las interfaces comparables y comparativas en Java. Se utiliza una interfaz comparable para clasificar los objetos según el orden natural y, a la vez, puede clasificar los objetos solo en un campo.
La interfaz comparable tiene un método 'compareTo ()' que debe anularse en la clase que implementa la interfaz Comparator y cuyos objetos se van a ordenar.
La interfaz del Comparador se utiliza para clasificar los objetos personalizados que se clasificarán en función de cualquier otro orden. La interfaz del comparador también nos permite ordenar objetos de dos clases diferentes en función de múltiples campos.
=> Lea la serie de formación Easy Java.
Lectura recomendada
- Tutorial de interfaz Java y clase abstracta con ejemplos
- Establecer interfaz en Java: Tutorial de conjunto de Java con ejemplos
- Implementación de Java: creación y ejecución de un archivo JAR de Java
- Conceptos básicos de Java: sintaxis de Java, clase de Java y conceptos básicos de Java
- Máquina virtual Java: cómo JVM ayuda a ejecutar aplicaciones Java
- Interfaz ListIterator en Java con ejemplos
- Matriz de objetos en Java: cómo crear, inicializar y usar
- Tutorial de JAVA para principiantes: más de 100 tutoriales prácticos en vídeo de Java