Heim  >  Artikel  >  Java  >  Wie löse ich das java.lang.ClassCastException-Problem bei der Verwendung von TreeMap in Java?

Wie löse ich das java.lang.ClassCastException-Problem bei der Verwendung von TreeMap in Java?

王林
王林nach vorne
2023-08-20 23:55:101089Durchsuche

Wie löse ich das java.lang.ClassCastException-Problem bei der Verwendung von TreeMap in Java?

TreeMap ist eine Klasse des Java Collection Framework, die die NavigableMap-Schnittstelle implementiert. Es speichert die Elemente der Karte in einer Baumstruktur und bietet eine effiziente Alternative zum Speichern von Schlüssel-Wert-Paaren in sortierter Reihenfolge. Bitte beachten Sie, dass beim Erstellen eines TreeMap-Objekts die Comparable-Schnittstelle oder die Comparator-Schnittstelle verwendet werden muss, damit wir die Sortierreihenfolge seiner Elemente beibehalten können. Andernfalls stoßen wir auf eine java.lang.ClassCastException. In diesem Artikel erklären wir, wie Sie die Schnittstellen Comparable und Comparator verwenden, um ClassCastException-Probleme in TreeMap zu beheben

Java.lang.ClassCastException-Problem in TreeMap beheben

Lassen Sie uns die Diskussion mit einem Beispielprogramm beginnen, das uns ClassCastException in TreeMap zeigt.

Die chinesische Übersetzung von

Beispiel 1

lautet:

Beispiel 1

Im folgenden Beispiel werden wir versuchen, ein benutzerdefiniertes Klassenobjekt zu einer TreeMap hinzuzufügen, ohne die Schnittstellen Comparable und Comparator zu verwenden, um die Situation darzustellen, wenn der Java-Compiler eine java.lang.ClassCastException auslöst.

import java.util.*;
public class TrMap {
   String item;
   int price;
   TrMap(int price, String item) {
	// this keyword shows these variables belong to constructor
      this.item = item; 
      this.price = price;
   }
	// method for converting object into string
   public String toString() {
      return "Item: " + item + ", " + "Price: " + price;
   }
   public static void main(String[] args) {
      // Declaring collection TreeMap
     TreeMap<TrMap, Integer> obj = new TreeMap<>();
      // Adding object to the obj map
      obj.put(new TrMap(495, "TShirt"), 1);
      obj.put(new TrMap(660, "Shirt"), 2);
      // printing details obj map
      System.out.println("Elements of the map: " + obj);
   }
}
Die chinesische Übersetzung von

Output

lautet:

output

Exception in thread "main" java.lang.ClassCastException: class TrMap cannot be cast to class java.lang.Comparable (TrMap is in unnamed module of loader 'app'; java.lang.Comparable is in module java.base of loader 'bootstrap')
	at java.base/java.util.TreeMap.compare(TreeMap.java:1569)
	at java.base/java.util.TreeMap.addEntryToEmptyMap(TreeMap.java:776)
	at java.base/java.util.TreeMap.put(TreeMap.java:785)
	at java.base/java.util.TreeMap.put(TreeMap.java:534)
	at TrMap.main(TrMap.java:18)

So beheben Sie den java.lang.ClassCastException-Fehler mithilfe der Comparable-Schnittstelle

Beginnen wir die Diskussion mit der Einführung der Comparable-Schnittstelle

Vergleichbare Schnittstelle

Diese Schnittstelle ist sehr nützlich, wenn wir benutzerdefinierte Objekte in natürlicher Reihenfolge sortieren möchten. Es sortiert beispielsweise Zeichenfolgen in lexikografischer Reihenfolge und Zahlen in numerischer Reihenfolge. Diese Schnittstelle ist im Paket „java.lang“ verfügbar. Im Allgemeinen stehen uns die in diesem Paket definierten Klassen und Schnittstellen standardmäßig zur Verfügung, sodass kein expliziter Import dieses Pakets erforderlich ist.

Grammatik

class nameOfclass implements Comparable<nameOfclass>

Hier ist „class“ das Schlüsselwort zum Erstellen einer Klasse und „implements“ das Schlüsselwort zum Aktivieren der von der Schnittstelle bereitgestellten Funktionen.

compareTo() wird übersetzt als:

Die Comparable-Schnittstelle definiert nur eine einzige Methode namens „CompareTo“, die überschrieben werden kann, um die Sammlung von Objekten zu sortieren. Sie gibt die Möglichkeit, die Objekte einer Klasse mit sich selbst zu vergleichen. Sie gibt 0 zurück, wenn „dieses“ Objekt gleich ist zum übergebenen Objekt, ein positiver Wert, wenn „dieses“ Objekt größer ist, andernfalls ein negativer Wert.

Grammatik

compareTo(nameOfclass nameOfobject);
Die chinesische Übersetzung von

Beispiel 2

lautet:

Beispiel 2

Das folgende Beispiel demonstriert die Verwendung von Comparable bei der Behebung von ClassCastException.

Methode

  • Erstellen Sie eine Klasse „TrMap“, die die Comparable-Schnittstelle implementiert. Deklarieren Sie innerhalb der Klasse zwei Variablen und definieren Sie einen Konstruktor mit zwei Parametern vom Typ „string“ und den doppelten Werten „item“ und „price“.

  • Im weiteren Verlauf werden wir die Methode „toString()“ verwenden, um die Daten des Objekts in einen String umzuwandeln. Definieren Sie dann die Methode „compareTo“ und übergeben Sie ein Objekt der Klasse „TrMap“ als Parameter, um das Objekt „this“ mit dem neu erstellten Objekt zu vergleichen

  • Deklarieren Sie nun in der Methode main() ein Objekt der TreeMap-Klasse mit dem Namen „obj“ und speichern Sie die Objektdetails mithilfe der integrierten Methode „put()“ darin. „Artikel“ ist der Schlüssel und der entsprechende Wert ist „Preis“.

  • Verwenden Sie abschließend die Methode „keySet()“ in einer for-each-Schleife, um den mit dem Schlüssel verknüpften Wert abzurufen und auszugeben.

import java.util.*;
import java.lang.*;
public class TrMap implements Comparable<TrMap> {
   String item;
   int price;
   TrMap(String item, int price) {
	// this keyword shows these variables belong to constructor
      this.item = item; 
      this.price = price;
   }
	// method for converting object into string
   public String toString() {
      return "Item: " + item + ", " + "Price: " + price;
   }
   public String getName() {
      return this.item;
   }
   // overriding method
   public int compareTo(TrMap comp) {
      return this.item.compareTo(comp.item);
   }
   public static void main(String[] args) {
      // Declaring collection TreeMap
      TreeMap<String, TrMap> obj = new TreeMap<>();
      // Adding object to the obj map
      TrMap obj1 = new TrMap("TShirt", 495);
      obj.put(obj1.getName(), obj1);
      TrMap obj2 = new TrMap("Shirt", 660);
      obj.put(obj2.getName(), obj2);
      TrMap obj3 = new TrMap("Kurti", 455);
      obj.put(obj3.getName(), obj3);
      // printing details obj map
      System.out.println("Elements of the map: ");
      for (String unKey : obj.keySet()) {
         System.out.println(obj.get(unKey));
      }
   }
}
Die chinesische Übersetzung von

Output

lautet:

output

Elements of the map: 
Item: Kurti, Price: 455
Item: Shirt, Price: 660
Item: TShirt, Price: 495

So beheben Sie das java.lang.ClassCastException-Problem mit Comparator

Lassen Sie uns zunächst die Comparator-Schnittstelle vorstellen.

Komparator

Wie der Name schon sagt, wird es verwendet, um etwas zu vergleichen. In Java ist Comparator eine Schnittstelle zum Sortieren benutzerdefinierter Objekte. Wir können unsere eigene Logik schreiben, um die angegebenen Objekte in der integrierten Methode namens 'compare()' zu sortieren. Diese Methode akzeptiert zwei Objekte als Parameter und gibt einen ganzzahligen Wert zurück. Anhand dieses ganzzahligen Werts bestimmt der Komparator, welches Objekt größer ist

Grammatik

class nameOfComparator implements Comparator< TypeOfComparator >() {
	compare( type object1, type object2 ) {
		// logic for comparison
	}
}    
Die chinesische Übersetzung von

Beispiel 3

lautet:

Beispiel 3

Das folgende Beispiel demonstriert die Verwendung von Comparator beim Beheben von ClassCastException.

Methode

  • Importieren Sie zunächst das Paket „java.util“, damit wir TreeSet verwenden können

  • Erstellen Sie eine Klasse namens „TrMap“. Deklarieren Sie innerhalb der Klasse zwei Variablen und definieren Sie einen Konstruktor, der über zwei Parameter „item“ und „price“ verfügt, die vom Typ „String“ bzw. „Integer“ sind.

  • Im weiteren Verlauf werden wir die Methode „toString()“ verwenden, um die Daten des Objekts in einen String umzuwandeln

  • Dann definieren Sie eine andere Klasse „Comp“, die die Comparator-Schnittstelle implementiert, und verwenden Sie darin die Methode „compare()“, um die TreeMap in aufsteigender Reihenfolge zu sortieren.

  • Erstellen Sie in der Methode „main()“ eine TreeMap-Sammlung, indem Sie eine Instanz der Klasse „Comp“ zum Sortieren übergeben

    • Abschließend verwenden Sie die Methode „put()“, um einige Elemente in der TreeMap-Sammlung zu speichern und dann das Ergebnis auszudrucken.

    import java.util.*;
    class TrMap {
       String item;
       int price;
       TrMap(int price, String item) {
    	// this keyword shows these variables belong to constructor
          this.item = item; 
          this.price = price;
       }
    	// method for converting object into string
       public String toString() {
          return "Item: " + item + ", " + "Price: " + price;
       }
       public String getName() {
          return this.item;
       }
    }
    // use of comparator interface
    class Comp implements Comparator<TrMap> {
       // logic to sort
       public int compare(TrMap i, TrMap j) {
          if(i.price > j.price) {
             return 1;
          } else {
             return -1;
          }
       }
    }
    public class Example2 {
       public static void main(String[] args) {
          // Declaring collection TreeMap
          TreeMap<TrMap, Integer> obj = new TreeMap<>(new Comp());
          // Adding object to the obj map
          obj.put(new TrMap(495, "TShirt"), 1);
          obj.put(new TrMap(660, "Shirt"), 2);
           // printing details obj map
          System.out.println("Elements of the map: " + obj);
       }
    }
    

    Output

    的中文翻译为:

    输出

    Elements of the map: {Item: TShirt, Price: 495=1, Item: Shirt, Price: 660=2}
    

    结论

    在本文中,我们首先定义了TreeMap类,然后介绍了TreeMap中的ClassCastException。在下一部分中,我们讨论了可以帮助解决这个ClassCastException的Comparator和Comparable接口。然后,我们看到了三个示例程序,展示了ClassCastException以及如何修复这个异常。

Das obige ist der detaillierte Inhalt vonWie löse ich das java.lang.ClassCastException-Problem bei der Verwendung von TreeMap in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen