¿Cómo arreglar java.lang.ClassCastException mientras usa TreeMap en Java?

Java.lang.ClassCastException es una de las excepciones no verificadas  en Java. Puede ocurrir en nuestro programa cuando tratamos de convertir un objeto de un tipo de clase  en un objeto de otro tipo de clase .

Cuando usamos objetos de clase personalizados como claves en TreeMap y no implementamos la interfaz comparable ni la interfaz de comparación , surge la excepción java.lang.ClassCastException.

Entonces, hay dos formas de corregir java.lang.ClassCastException mientras usa TreeMap en Java:

Método 1: Usar comparables

Podemos corregir java.lang.ClassCastException mediante los objetos utilizados como claves del TreeMap implementando la interfaz Comparable.

Pseudocódigo:

// Custom class Student implements comparable interface

class Student implements Comparable<Student> {

  String name;
  Integer marks;

  public Student(String name, Integer marks) {
    this.name = name;
    this.marks = marks;
  }

  // Override toString method
  public String toString() {
    return this.name + " : " + this.marks;
  }

  public int getMarks() {
    return this.marks;
  }

  // Override compareTo method that sort treemap in the ascending order of the marks
  public int compareTo(Student stu) {
    return this.getMarks() - stu.getMarks();
  }
}

Implementación:

Java

// Java program to demonstrate how to fix
// java.lang.ClassCastException while using the TreeMap
 
import java.util.*;
 
// Custom class Student implements comparable interface
class Student implements Comparable<Student> {
 
    String name;
    Integer marks;
 
    public Student(String name, Integer marks)
    {
        this.name = name;
        this.marks = marks;
    }
 
    // Override toString method
    public String toString()
    {
        return this.name + " : " + this.marks;
    }
 
    public int getMarks() { return this.marks; }
 
    // Override compareTo method that sort treemap in the
    // ascending order of the marks
    public int compareTo(Student stu)
    {
        return this.getMarks() - stu.getMarks();
    }
}
 
public class GFG {
    public static void main(String[] args)
    {
 
        // New TreeMap
        TreeMap<Student, Integer> map = new TreeMap<>();
 
        map.put(new Student("Akshay", 500), 1);
        map.put(new Student("Bhanu", 600), 2);
        map.put(new Student("Chetan", 300), 3);
 
        System.out.println("The Treemap : " + map);
    }
}
Producción

The Treemap : {Chetan : 300=3, Akshay : 500=1, Bhanu : 600=2}

Método 2: Usar Comparador

Podemos arreglar java.lang.ClassCastException proporcionando un comparador personalizado al constructor en el momento de la creación del TreeMap.

Pseudocódigo: 

// Custom comparator

class MyComparator implements Comparator<Student> {
  // Compare method that sort TreeMap in the ascending order of the marks
  public int compare(Student stu1, Student stu2) {
    return stu1.getMarks() - stu2.getMarks();
  }
}

Implementación: 

Java

// Java program to demonstrate how to fix
// java.lang.ClassCastException while using the TreeMap
 
import java.util.*;
 
// Custom class Student implements comparable interface
class Student {
 
    String name;
    Integer marks;
 
    public Student(String name, Integer marks)
    {
        this.name = name;
        this.marks = marks;
    }
 
    // Override toString method
    public String toString()
    {
        return this.name + " : " + this.marks;
    }
 
    public int getMarks() { return this.marks; }
}
 
// Custom comparator
class MyComparator implements Comparator<Student> {
   
    // Compare method that sort TreeMap in the ascending
    // order of the marks
    public int compare(Student stu1, Student stu2)
    {
        return stu1.getMarks() - stu2.getMarks();
    }
}
 
public class GFG {
    public static void main(String[] args)
    {
 
        // New TreeMap
        TreeMap<Student, Integer> map
            = new TreeMap<>(new MyComparator());
 
        map.put(new Student("Akshay", 500), 1);
        map.put(new Student("Bhanu", 600), 2);
        map.put(new Student("Chetan", 300), 3);
 
        System.out.println("The Treemap : " + map);
    }
}
Producción

The Treemap : {Chetan : 300=3, Akshay : 500=1, Bhanu : 600=2}

Publicación traducida automáticamente

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