Imprimir TreeMap con objetos de clase personalizados como claves o valores en Java

TreeMap es una implementación de mapa que mantiene sus entradas ordenadas según el orden natural de sus claves. Entonces, para un número entero, esto significaría un orden ascendente, y para una string, sería un orden alfabético. TreeMap también se puede ordenar según el usuario mediante el uso de un comparador en el momento de la construcción.

Aquí vamos a ver cómo imprimir TreeMap con objetos de clase personalizados como claves o valores. Pero antes de eso, veamos qué sucede exactamente al intentar imprimirlo normalmente. Al intentar imprimir el objeto directamente, es posible que el valor impreso no esté en el formato adecuado y, en varios casos, los valores basura como @ agc1243 se imprimen en la salida.

Implementación de impresión normal:

Java

// Printing TreeMap Having Custom Class Objects directly
import java.io.*;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
  
// make a class Student
class Student {
  
    private Integer regId;
    private String name;
  
    public Student(Integer regId, String name)
    {
        this.regId = regId;
        this.name = name;
    }
  
    public Integer getId() { return regId; }
  
    public String getName() { return name; }
}
class GFG {
    public static void main(String[] args)
    {
  
        // creating a TreeMap
        TreeMap<Integer, Student> tmap
            = new TreeMap<Integer, Student>();
  
        // Mapping student objects to int keys
        tmap.put(1, new Student(101, "Abhay"));
        tmap.put(2, new Student(102, "Sarika"));
        tmap.put(3, new Student(103, "Vanshika"));
  
        // get all entries
        Set<Map.Entry<Integer, Student> > entries
            = tmap.entrySet();
  
        // printing keys and values using for loop
        for (Map.Entry<Integer, Student> entry : entries) {
            System.out.println(entry.getKey() + "=>"
                               + entry.getValue());
        }
    }
}
Producción

1=>Student@3941a79c
2=>Student@506e1b77
3=>Student@4fca772d

 

¿La razón por la que la salida no está en el formato adecuado?

La razón es que nuestra clase Student no anuló el método toString de la clase Object . Es por eso que aquí se usa el método toString de la clase Object, que imprime «class_name@object_hashcode» cuando se imprime un objeto.

Entonces, la siguiente pregunta es ¿Cómo solucionar esto?

Para solucionar esto, anule el método en nuestra clase Student.

Implementación:

Java

// Printing TreeMap Having Custom Class
// Objects as Keys or Values in Java
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
  
// make a class Student
class Student {
  
    private Integer regId;
    private String name;
  
    public Student(Integer regId, String name)
    {
        this.regId = regId;
        this.name = name;
    }
  
    public Integer getId() { return regId; }
  
    public String getName() { return name; }
    /*
     * Override this method in your custom class
     * used as key or value in the TreeMap
     */
    public String toString()
    {
        return "[" + this.getId() + "=>" + this.getName()
            + "]";
    }
}
class GFG {
    public static void main(String[] args)
    {
  
        // creating a TreeMap
        TreeMap<Integer, Student> tmap
            = new TreeMap<Integer, Student>();
  
        // Mapping student objects to int keys
        tmap.put(1, new Student(101, "Abhay"));
        tmap.put(2, new Student(102, "Sarika"));
        tmap.put(3, new Student(103, "Vanshika"));
  
        // get all entries
        Set<Map.Entry<Integer, Student> > entries
            = tmap.entrySet();
  
        // printing keys and values using for loop
        for (Map.Entry<Integer, Student> entry : entries) {
            System.out.println(entry.getKey() + "=>"
                               + entry.getValue());
        }
    }
}
Producción

1=>[101=>Abhay]
2=>[102=>Sarika]
3=>[103=>Vanshika]

Nota: Entonces, el consejo principal que debe recordar aquí es anular siempre el método toString() en sus clases personalizadas.

Publicación traducida automáticamente

Artículo escrito por abhaybcg3 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 *