¿Cómo se escribe comparable en Java??

¿Cómo se escribe comparable en Java??
Ejemplos de listas de Java son; Vector, pila, atributivo, arraylist y linkedlist. La clase Java Collections tiene métodos sobrecargados para ordenar una lista de objetos predefinidos. La clase de matrices Java tiene métodos sobrecargados para clasificar una matriz de objetos predefinidos.

Los métodos de sort () predefinidos son para clasificar objetos predefinidos. ¿Qué pasa con los objetos definidos por el usuario?? Java tiene una interfaz llamada comparable. Una interfaz es un tipo de clase cuyos métodos son declaraciones sin definiciones (cuerpos). Por lo tanto, se debe implementar una clase desde una interfaz para que se definan los métodos (cuerpos dados). De la clase implementada, los objetos se pueden instanciar desde un nombre dado por el programador.

Java tiene una clase comparable predefinida. Los métodos sort () en colecciones y matrices usan la clase comparable predefinida para clasificar objetos predefinidos. Sin embargo, para ordenar una lista o matriz de objetos definidos por el usuario, el programador debe implementar (definir) una clase comparable de usuario de la interfaz comparable. Esta clase implementada (definida) del usuario permite la clasificación de objetos definidos por el usuario en una lista o matriz. Por lo tanto, una clase comparable predefinida permite la clasificación de objetos predefinidos, mientras que una clase comparable definida por el usuario permite la clasificación de objetos definidos por el usuario. Los objetos definidos por el usuario no son literales, por lo que una clase de objetos definidos por el usuario necesita su propia implementación comparable definida por el usuario.

Este artículo ilustra cómo escribir comparable en Java.

Ejemplo de clase definida por el usuario

La clase definida por el usuario realmente implementa la interfaz comparable. La interfaz comparable tiene solo un método, que es,

int comparto (T o)

Está definido (dado un cuerpo) para ordenar ascendente o definido para ordenar descender. Devuelve un entero negativo, o cero, o un entero positivo, ya que su objeto es menor que, igual o mayor que el objeto especificado.

Esta clase de interés, implementada a partir de la interfaz comparable, es la clase definida por el usuario con ahora un método comparado () definido (). Sin embargo, esta no es una clase completa definida por el usuario. Puede tener otros métodos y propiedades (campos) propios, dependiendo mucho del programador. Los objetos instanciados de esta clase implementada por el usuario serán los objetos de la lista o la matriz a ordenar. Cada objeto tiene el mismo método comparto () en la clasificación, que controla la clasificación.

Clase de ejemplo

El siguiente código muestra una clase definida por el usuario para empleados, de la cual los objetos (empleados) se instanciarán. Para que los objetos se clasifiquen, la clase Empleado implementa una interfaz comparable y define (le da a un cuerpo) el método CompareTo () como un método especial de la clase.

Clase Empleado implementos comparables
Cadena fname; int Age;
Empleado (String Fname, Int Age)
este.fname = fname;
este.edad = edad;

Public int Compareto (Employee Emp)
Si (edad < emp.age)
regreso -1;
más si (edad == EMP.edad)
regresar 0;
demás
retorno +1;

No hay ningún objeto real literal aquí. La intención es tener que clasificar a los empleados por edad, ascender. Esto también está comparando al empleado por edad. Y entonces la comparación () debe definirse. Esta definición es para clasificar ascender. En este método, cuerpo (definición), edad y EMP.edad, consulte dos elementos diferentes en la lista o matriz. La edad se refiere al elemento antes de EMP.edad .

Un método Main () adecuado para esto es:

public static void main (string [] args)
Lista de arreglo Al = nueva ArrayList();
Alabama.agregar (nuevo empleado ("John", 40)); Alabama.agregar (nuevo empleado ("Peter", 50));
Alabama.agregar (nuevo empleado ("Christopher", 30));
Colecciones.ordenar (al);
para (int i = 0; iSistema.afuera.println (Al.Consigo).fname + " + Al.Consigo).edad);

Leer el código. La salida es:

Christopher 30
Juan 40
Pedro 50

ordenado ascendente, por edad.

Clasificación descendente

La definición de método comparación () anterior es para ascender. Para hacer que se descienda, codifíquelo de la siguiente manera:

Public int Compareto (Employee Emp)
Si (edad < emp.age)
retorno +1;
más si (edad == EMP.edad)
regresar 0;
demás
regreso -1;

Tenga en cuenta que < has not been changed. However, -1 returned has been changed to +1; and +1 returned has been changed to -1. With this, the output for the above specific list is:

Pedro 50
Juan 40
Christopher 30

ordenado descendiendo, por edad.

Comparable para la matriz

Una clase comparable para una matriz es la misma que una clase comparable para una lista, como se explicó anteriormente. La clase es un programador implementado una clase que implementa la interfaz comparable. Esta clase implementada del programador también define el método comparto (), ya sea ascendente o descendente. Los objetos instanciados de esta clase se convierten en los objetos para la matriz. El método de comparación () definido controla su clasificación.

El siguiente método principal, clasifica una matriz de los mismos empleados anteriores, ascendiendo:

Empleado [] arr = nuevo empleado [3];
arr [0] = nuevo empleado ("John", 40); arr [1] = nuevo empleado ("Peter", 50);
arr [2] = nuevo empleado ("Christopher", 30);
Matrices.ordenar (arr);
para (int i = 0; iSistema.afuera.println (arr [i].fname + " + arr [i].edad);

Tenga en cuenta que en lugar de,

Colecciones.ordenar (al);

hay,

Matrices.ordenar (arr);

esta vez, porque una matriz no es realmente una lista. La salida debe ser

Christopher 30
Juan 40
Pedro 50

ascendente, por edad. Esto es con la condición de que el cuerpo del método comparto () es:

Public int Compareto (Employee Emp)
Si (edad < emp.age)
regreso -1;
más si (edad == EMP.edad)
regresar 0;
demás
retorno +1;

Si el cuerpo fuera,

Public int Compareto (Employee Emp)
Si (edad < emp.age)
retorno +1;
más si (edad == EMP.edad)
regresar 0;
demás
regreso -1;

entonces la matriz se clasificaría descendiendo para dar como resultado la salida:

Pedro 50
Juan 40
Christopher 30

Conclusión

La clase comparable predefinida permite la clasificación de objetos predefinidos, mientras que la clase comparable definida por el usuario habilita la clasificación de objetos definidos por el usuario. Los objetos definidos por el usuario no son literales, por lo que una clase de objetos definidos por el usuario necesita su propia implementación comparable definida por el usuario.

La clase de interés, cuyos objetos deben ser instanciados, debe implementar la interfaz comparable. La interfaz comparable tiene el método comparación (), que debe definirse en la clase para la clasificación ascendente o descendente (inversa). Es este método el que controla la clasificación en la lista o la matriz.

La misma clase comparable para ordenar una lista se puede usar para ordenar una matriz. La clase es un programador implementado una clase que implementa la interfaz comparable. Esta clase implementada del programador también define el método comparto (), ya sea ascendente o descendente. Los objetos instanciados de esta clase se convierten en los objetos de la matriz.