Descripción general de Comparable en Java Ejemplo

Comparable en Java es una interferencia utilizada para comparar objetos actuales con otros objetos del mismo tipo. Esta comparación se puede usar para ordenar elementos en una colección. Deberá implementar la interfaz en una clase para que sea ordenable o "comparable". Deberá implementar un solo método "compareTo". Este orden de cualquier tipo se llama orden natural y el método "compareTo" implementado se llama método de comparación natural. Aquí, en este artículo de Ejemplo de Comparable in Java, veremos los diferentes ejemplos de comparable en java.

Declaración:

Interfaz comparable

Para implementar esta interfaz, debe implementar este método:

public int compareTo(To);

Parámetros:

T - es el tipo de objeto con el que se compara este objeto.

Valor de retorno:

El método compareTo devuelve 0 si el objeto especificado y este objeto son iguales, devuelve un entero negativo si este objeto es menor que el objeto especificado, y devuelve un entero positivo si este objeto es mayor que el objeto especificado.

Lanza

ClasscastException: si el objeto pasado a este método es nulo

NullPointerException: si el objeto pasado a este método no es compatible con este objeto.

Las clases que implementan una interfaz comparable, tienen su orden natural especificado con ellas y, por lo tanto, se pueden ordenar directamente en Collection o Arrays utilizando Collections.sort () y Arrays.sort (). Además, se pueden usar como clave en mapas y elementos ordenados en conjuntos ordenados sin especificar Comparator por separado.

Comprendamos la interfaz comparable con la ayuda de un ejemplo:

Ejemplo:

package comparableDemo;
import java.util.TreeSet;
public class Student implements Comparable (
private int rollNo;
private String name;
private int age;
public Student(int rollNo, String name, int age) (
this.rollNo = rollNo;
this.name = name;
this.age = age;
)
@Override
public int compareTo(Student o) (
if (this.rollNo > o.rollNo) (
return 1;
) else if (this.rollNo == o.rollNo) (
return 0;
) else (
return -1;
)
)
@Override
public String toString() (
return "RollNo-" + this.rollNo + ", Name-" + this.name + ", Age-" + this.age;
)
public static void main(String() args) (
TreeSet students = new TreeSet();
Student student1 = new Student(3, "Raj", 20);
Student student2 = new Student(5, "Shyam", 18);
Student student3 = new Student(1, "Ram", 19);
Student student4 = new Student(4, "Sunil", 25);
Student student5 = new Student(2, "Ajay", 26);
students.add(student1);
students.add(student2);
students.add(student3);
students.add(student4);
students.add(student5);
for (Student student : students) (
System.out.println(student);
)
)
)

Salida:

Explicación

Esta es una aplicación para almacenar detalles de los estudiantes.

  • Primero, hemos creado una clase "Estudiante" como la representación de la entidad Estudiante. Vamos a almacenar detalles básicos como el número de registro, el nombre y la edad de los estudiantes.
  • Y el requisito es ordenar la lista de estudiantes según el número de lista.
  • Para cumplir con este requisito, se implementa una interfaz comparable y se compara con los estudiantes según el número de lista, como puede ver la implementación del método "compareTo".
  • Luego tenemos el método principal para mostrar la funcionalidad. Aquí hemos creado un "TreeSet" y hemos agregado cinco estudiantes con números aleatorios. Hemos utilizado "TreeSet" porque almacena elementos en orden ordenado.
  • Ahora, si itera por la lista de estudiantes, encontrará que los estudiantes se ordenan según el número de lista. ¡Ese era nuestro requisito!
  • También podríamos clasificar a los estudiantes según otros atributos como nombre o edad. Para hacer esto, tendremos que usar variables de nombre o edad en el método "compareTo" en lugar de "rollNo".

Ejemplo:

@Override
public int compareTo(Student o) (
if (this.age> o.age) (
return 1;
) else if (this.age == o.age) (
return 0;
) else (
return -1;
)
)
OR
@Override
public int compareTo(Student o) (
return this.name.compareTo(o.name);
)

Comparable vs comparador

Comparator también es una interfaz como Comparable que se utiliza para comparar dos objetos de un tipo. La diferencia es que Comparator no está implementado en la propia clase de entidad. Debemos implementarlo en otra clase y proporcionar la instancia al mecanismo de clasificación explícitamente. También podemos usar una instancia de clase anónima para este propósito.

Por ejemplo, supongamos que tenemos una clase de estudiante sin implementar una interfaz comparable:

package comparableDemo;
import java.util.TreeSet;
public class Student(
private int rollNo;
private String name;
private int age;
public Student(int rollNo, String name, int age) (
this.rollNo = rollNo;
this.name = name;
this.age = age;
)
@Override
public String toString() (
return "RollNo-" + this.rollNo + ", Name-" + this.name + ", Age-" + this.age;
)
public static void main(String() args) (
TreeSet students = new TreeSet();
Student student1 = new Student(3, "Raj", 20);
Student student2 = new Student(5, "Shyam", 18);
Student student3 = new Student(1, "Ram", 19);
Student student4 = new Student(4, "Sunil", 25);
Student student5 = new Student(2, "Ajay", 26);
students.add(student1);
students.add(student2);
students.add(student3);
students.add(student4);
students.add(student5);
for (Student student : students) (
System.out.println(student);
)
)
)

Si intenta ejecutar este programa, obtendrá esta excepción:

Porque TreeSet necesita una forma de ordenar los elementos.

Para resolver este error, podemos usar Comparator como se implementa en este programa:

package comparableDemo;
import java.util.Comparator;
import java.util.TreeSet;
public class Student (
private int rollNo;
private String name;
private int age;
public Student(int rollNo, String name, int age) (
this.rollNo = rollNo;
this.name = name;
this.age = age;
)
@Override
public String toString() (
return "RollNo-" + this.rollNo + ", Name-" + this.name + ", Age-" + this.age;
)
public static void main(String() args) (
Comparator studentComparator = new Comparator() (
@Override
public int compare(Student o1, Student o2) (
if (o1.rollNo < o2.rollNo) (
return -1;
) else if (o1.rollNo == o2.rollNo) (
return 0;
) else (
return 1;
)
)
);
TreeSet students = new TreeSet(studentComparator);
Student student1 = new Student(3, "Raj", 20);
Student student2 = new Student(5, "Shyam", 18);
Student student3 = new Student(1, "Ram", 19);
Student student4 = new Student(4, "Sunil", 25);
Student student5 = new Student(2, "Ajay", 26);
students.add(student1);
students.add(student2);
students.add(student3);
students.add(student4);
students.add(student5);
for (Student student : students) (
System.out.println(student);
)
)
)

Puede ver que la interfaz del Comparador se implementa en una clase interna anónima y se proporciona una instancia a TreeSet para ordenar los elementos. Ahora obtendrá una salida adecuada como antes.

Interfaz de colección en Java

La colección es la interfaz raíz en el marco de colecciones. Contiene la declaración de todos los métodos de propósito general que se implementan en colecciones como Listas y Conjuntos. La interfaz de Map no extiende la interfaz de Collection porque Map es una colección de pares clave-valor y no solo una colección de elementos. Algunos de los métodos de interfaz de la Colección se implementan en una clase abstracta "AbstractCollection".

Esta interfaz no se implementa directamente, sino que se extiende mediante interfaces específicas porque la implementación de estos métodos es específica de la colección. Por ejemplo, alguna colección permite elementos duplicados (Ex-List) mientras que algunos no (Ex-Set), algunos mantienen la indexación (Ex-List) mientras que otros no (Ex-Set).

Aquí se describen algunos métodos importantes:

  1. Boolean add (E e): este método agrega un elemento a esta colección y devuelve el estado de la operación de agregar.
  2. addAll booleano (Colección c): este método agrega todos los elementos de la colección especificada a esta colección y devuelve el estado de la operación de agregar.
  3. void clear (): este método elimina todos los elementos de esta colección.
  4. boolean contiene (Object o): este método verifica si el elemento especificado está presente en la colección o no. Devuelve verdadero o falso en consecuencia.
  5. boolean contiene (Colección c): este método verifica si todos los elementos de la colección especificada están presentes en esta colección o no y devuelve verdadero o falso en consecuencia.
  6. boolean isEmpty (): este método comprueba si la colección está vacía o no y devuelve verdadero o falso en consecuencia.
  7. Iterator iterator (): este método devuelve un iterador para esta colección. Iterator se usa para recorrer en iteración todos los elementos de esta colección.
  8. eliminación booleana (Objeto o): este método elimina el elemento especificado de la colección y devuelve el estado de la operación de eliminación.
  9. removeAll booleano (Colección c): este método elimina todos los elementos de esta colección que están presentes en la colección especificada y esta colección.
  10. boolean retieneTodo (Colección c): este método elimina todos los elementos de esta colección que no están presentes en la colección especificada y están presentes en esta colección.
  11. int size (): este método devuelve el tamaño de esta colección.
  12. Object () toArray (): este es un método importante que forma y devuelve la matriz que contiene todos los elementos de esta colección.
  13. T () toArray (T () a): este método agrega todos los elementos de esta colección en una matriz específica y devuelve la matriz. Si el tamaño de la matriz es menor que el tamaño de esta colección, crea una nueva matriz de tipos igual que el tipo de matriz especificada y la devuelve. Si el tamaño de la matriz especificada es mayor que el tamaño de esta colección, el valor nulo se establece para los elementos restantes en la matriz y devuelve la matriz.

Conclusión: ejemplo comparable en Java

En resumen, la interfaz Comparable en Java es muy útil para comparar objetos manualmente, ordenar colecciones y matrices o para tener una colección ordenada. También podemos ordenar elementos basados ​​en diferentes atributos de la entidad. No es obligatorio, pero es muy recomendable tener el mismo resultado de iguales y el método "compareTo" para evitar el desorden en una colección que utiliza ambos métodos.

Artículos recomendados

Esta es una guía de Comparable en Java Ejemplo. Aquí discutimos el Ejemplo de Introducción Comparable en Java, la interfaz de Colección en Java, etc. También puede consultar nuestros otros artículos sugeridos para obtener más información:

  1. Ordenar en Java
  2. El mejor IDE de Java
  3. Secuencias en Python
  4. Funciones de cadena de Oracle
  5. Guía completa para ordenar en C # con ejemplos
  6. Colecciones PL / SQL | Sintaxis, Tipos, Excepciones