¿Cómo crear objetos TreeMap usando una interfaz comparable en Java?

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());
        }
    }
}
Producción

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *