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()); } } }
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()); } } }
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.