La interfaz comparable se encuentra en el paquete java.lang, que se utiliza para ordenar los objetos de una clase definida por el usuario sobre la base de un solo atributo. Esta interfaz contiene un único método compareTo(Object). Se usa para comparar el objeto actual con los objetos especificados y se puede usar para clasificar clases definidas por el usuario , clase contenedora y objetos de string.
Sintaxis:
compareTo(Object o) ;
Parámetro: el objeto especificado con el que se compara el objeto actual.
Tipo de devolución: valor entero
- Entero positivo: si el objeto actual es mayor que el objeto especificado.
- Entero negativo: si el objeto actual es menor que el objeto especificado.
- Cero: si el objeto actual es igual al objeto especificado.
Uso de interfaz comparable en Java
TreeMap en Java, los elementos se almacenan como pares clave-valor que se ordenan en función de la clave. Cuando la clave es de clase String o Wrapper Classes, implementa la interfaz Comparable de forma predeterminada y almacena los elementos en orden. Sin embargo, si alguien quiere crear la clave deseada de un tipo particular definido por el usuario, es decir, una clase definida por el usuario, necesitamos implementar la interfaz Comparable para ordenar los objetos en un orden particular sobre la base de un atributo.
Implementación: Sin usar la interfaz comparable.
Java
// Creating TreeMap objects using // Comparable interface in Java // Importing all generic java utility and input import java.io.*; import java.util.*; // Class - User defined named Employee public class Employee { // Attributes of object of class int id; String name; // Parameterized constructor for user-defined class public Employee(int id, String name) { // This keyword refers to current object in a // constructor this.id = id; this.name = name; } } // Main class class GFG { // Main driver method public static void main(String[] args) throws Exception { // Declaring and initializing a TreeMap TreeMap<Employee, String> tm = new TreeMap<>(); // Employee object1 // custom input Employee e1 = new Employee(1, "Pathak"); // Employee object2 // custom input Employee e2 = new Employee(2, "Anshu"); // Put method associating specific key-value in Map tm.put(e1, "First"); tm.put(e2, "Second"); // Iterating over Map using for-each loop // Map with employee Key for (Map.Entry<Employee, String> e : tm.entrySet()) { // Print key-value pairs of TreeMap System.out.println(e.getKey().id + " " + e.getValue()); } } }
Salida: Error
El código anterior arroja excepciones ya que la interfaz comparable no se ha implementado y, por lo tanto, no puede ordenar los elementos del mapa sobre la base de una clave en el orden correcto. Entonces, para manejar la excepción
Implementación: con el uso de la interfaz comparable.
Java
// Creating TreeMap objects using // Comparable interface in Java // Importing all generic java utility and input import java.io.*; import java.util.*; // User-defined class named Employee // implementing comparable public class Employee implements Comparable<Employee> { // Attributes of object of class int id; String name; // Parameterized constructor for user-defined class public Employee(int id, String name) { // This keyword refers to // current object in a constructor this.id = id; this.name = name; } // Comparable interface public int compareTo(Employee e) { // Two instance of class can be compared int diff = this.id - e.id; // Note: Two equal employee Id will return 0 return diff; } } // Main class class GFG { // Main driver method public static void main(String[] args) { // Declaring and initializing a TreeMap TreeMap<Employee, String> tm = new TreeMap<>(); // Employee object1 (custom input) Employee e1 = new Employee(1, "Pathak"); // Employee object2 (custom input) Employee e2 = new Employee(2, "Anshu"); // Put method associating specific key-value in Map tm.put(e1, "First"); tm.put(e2, "Second"); // Iterating over Map using for-each loop // Map with employee key for (Map.Entry<Employee, String> e : tm.entrySet()) { // Print key-value pairs of TreeMap System.out.println(e.getKey().id + " " + e.getKey().name + " " + e.getValue()); } } }
1 Pathak First 2 Anshu Second
Publicación traducida automáticamente
Artículo escrito por anshukumarpathak1999 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA