TreeMap en Java se usa para implementar la interfaz Map y NavigableMap junto con la clase AbstractMap . El mapa se ordena según el orden natural de sus claves, o mediante un comparador proporcionado en el momento de la creación del mapa, según el constructor que se utilice. Para ordenar claves en TreeMap usando un comparador con objetos definidos por el usuario en Java, debemos crear una clase que implemente la interfaz Comparator para anular el método de comparación.
// AccordingMarks class that implements the // comparator interface to override compare method class AccordingMarks implements Comparator<Student> { public int compare(Student s1, Student s2) { return s1.getMarks().compareTo(s2.getMarks()); } }
En el siguiente código, estamos pasando un objeto personalizado como clave en TreeMap, es decir, la clase definida por el usuario Student. En este caso, necesitamos pasar el comparador Según Marcas en el constructor, mientras creamos el objeto TreeMap que ordena el TreeMap según las calificaciones del alumno.
Ejemplo 1: Clasificar claves en orden ascendente de las marcas
Java
// Java program to demonstrate how to sort TreeMap of custom // class objects import java.util.*; // Custom class class Student { private String name; private int marks; public Student(String name, Integer marks) { this.name = name; this.marks = marks; } public String getName() { return this.name; } public Integer getMarks() { return this.marks; } // override toString method public String toString() { return this.name + ": " + marks; } } // Comparator that sort elements according to marks in // Ascending order class AccordingMarks implements Comparator<Student> { public int compare(Student s1, Student s2) { return s1.getMarks().compareTo(s2.getMarks()); } } // Driver Code public class GFG { public static void main(String[] args) { // New TreeMap of custom class Student TreeMap<Student, Integer> map = new TreeMap<>(new AccordingMarks()); // Add elements to TreeMap map.put(new Student("Akshay", 400), 1); map.put(new Student("Bina", 500), 2); map.put(new Student("Chintu", 300), 3); System.out.println( "TreeMap keys sorting in ascending order of the marks:"); // Print map using Entry for (Map.Entry<Student, Integer> entry : map.entrySet()) { System.out.println("Key : (" + entry.getKey() + "), Value : " + entry.getValue()); } } }
Producción:
TreeMap keys sorting in ascending order of the marks: Key : (Chintu: 300), Value : 3 Key : (Akshay: 400), Value : 1 Key : (Bina: 500), Value : 2
Ejemplo 2: Ordenar claves en orden descendente de las marcas
Java
// Java program to demonstrate how to sort TreeMap of custom // class objects import java.util.*; // Custom class class Student { private String name; private int marks; public Student(String name, Integer marks) { this.name = name; this.marks = marks; } public String getName() { return this.name; } public Integer getMarks() { return this.marks; } // override toString method public String toString() { return this.name + ": " + marks; } } // Comparator that sort elements according to marks in // Descending order class AccordingMarks implements Comparator<Student> { public int compare(Student s1, Student s2) { return s2.getMarks().compareTo(s1.getMarks()); } } // Driver Code public class GFG { public static void main(String[] args) { // New TreeMap of custom class Student TreeMap<Student, Integer> map = new TreeMap<>(new AccordingMarks()); // Add elements to TreeMap map.put(new Student("Akshay", 400), 1); map.put(new Student("Bina", 500), 2); map.put(new Student("Chintu", 300), 3); System.out.println( "TreeMap Keys sorted in descending order of the marks: "); // Print map using Entry for (Map.Entry<Student, Integer> entry : map.entrySet()) { System.out.println("Key : (" + entry.getKey() + "), Value : " + entry.getValue()); } } }
Producción:
TreeMap Keys sorted in descending order of the marks: Key : (Bina: 500), Value : 2 Key : (Akshay: 400), Value : 1 Key : (Chintu: 300), Value : 3
Publicación traducida automáticamente
Artículo escrito por nikhilchhipa9 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA