Rumah  >  Artikel  >  Java  >  Bagaimana untuk menyelesaikan isu java.lang.ClassCastException semasa menggunakan TreeMap dalam Java?

Bagaimana untuk menyelesaikan isu java.lang.ClassCastException semasa menggunakan TreeMap dalam Java?

王林
王林ke hadapan
2023-08-20 23:55:101089semak imbas

Bagaimana untuk menyelesaikan isu java.lang.ClassCastException semasa menggunakan TreeMap dalam Java?

TreeMap ialah kelas Rangka Kerja Koleksi Java yang melaksanakan antara muka NavigableMap. Ia menyimpan elemen peta dalam struktur pokok dan menyediakan alternatif yang cekap untuk menyimpan pasangan nilai kunci dalam susunan yang disusun. Sila ambil perhatian bahawa semasa mencipta objek TreeMap, seseorang mesti menggunakan antara muka Sebanding atau antara muka Comparator supaya kita boleh mengekalkan susunan isihan unsurnya, jika tidak, kita akan menemui java.lang.ClassCastException. Dalam artikel ini, kami akan menerangkan cara menggunakan antara muka Comparable dan Comparator untuk menyelesaikan isu ClassCastException dalam TreeMap

Selesaikan masalah java.lang.ClassCastException dalam TreeMap

Mari kita mulakan perbincangan dengan contoh program yang akan menunjukkan kepada kita ClassCastException dalam TreeMap.

Terjemahan bahasa Cina bagi

Contoh 1

ialah:

Contoh 1

Dalam contoh berikut, kami akan cuba menambah objek kelas tersuai pada TreeMap tanpa menggunakan antara muka Comparable dan Comparator untuk menunjukkan situasi apabila pengkompil Java membuang java.lang.ClassCastException.

rreeee Terjemahan bahasa Cina bagi

Output

ialah:

output

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

Cara membetulkan ralat java.lang.ClassCastException menggunakan antara muka Setanding

Mari mulakan perbincangan dengan memperkenalkan antara muka Setanding

Antara muka setanding

Antara muka ini sangat berguna apabila kita ingin mengisih objek tersuai dalam susunan semula jadi. Contohnya, ia menyusun rentetan dalam susunan leksikografi dan nombor dalam susunan berangka. Antara muka ini tersedia dalam pakej 'java.lang'. Secara amnya, kelas dan antara muka yang ditakrifkan dalam pakej ini tersedia kepada kami secara lalai, jadi tidak perlu mengimport pakej ini secara eksplisit.

Tatabahasa

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)

Di sini, kelas ialah kata kunci untuk mencipta kelas, dan implement ialah kata kunci untuk mendayakan ciri yang disediakan oleh antara muka.

compareTo() diterjemahkan sebagai:

Antara muka Sebanding mentakrifkan hanya satu kaedah bernama 'CompareTo' yang boleh ditindih untuk mengisih koleksi objek Ia memberikan kuasa untuk membandingkan objek kelas dengan dirinya sendiri kepada objek yang dilalui, nilai positif jika objek 'ini' lebih besar sebaliknya nilai negatif.

Tatabahasa

class nameOfclass implements Comparable<nameOfclass>
Terjemahan bahasa Cina bagi

Contoh 2

ialah:

Contoh 2

Contoh berikut menunjukkan penggunaan Comparable dalam membetulkan ClassCastException.

Kaedah

  • Buat kelas 'TrMap' yang melaksanakan antara muka Setanding. Di dalam kelas, isytiharkan dua pembolehubah dan tentukan pembina dengan dua parameter jenis rentetan dan dua 'item' dan 'harga'.

  • Bergerak lebih jauh, kami akan menggunakan kaedah 'toString()' untuk menukar data objek kepada rentetan. Kemudian, tentukan kaedah 'compareTo' dan lulus objek kelas 'TrMap' sebagai parameter untuk membandingkan objek 'ini' dengan objek yang baru dibuat

  • Sekarang, dalam kaedah main(), isytiharkan objek kelas TreeMap bernama 'obj' dan simpan butiran objek ke dalamnya menggunakan kaedah terbina bernama 'put()'. 'item' ialah kunci dan nilai yang sepadan ialah 'harga'.

  • Akhir sekali, gunakan kaedah 'keySet()' dalam gelung untuk setiap untuk mendapatkan dan mencetak nilai yang dikaitkan dengan kunci.

rreeee Terjemahan bahasa Cina bagi

Output

ialah:

output

compareTo(nameOfclass nameOfobject);

Cara membetulkan masalah java.lang.ClassCastException menggunakan Comparator

Mula-mula, mari kita perkenalkan antara muka Pembanding.

Pembanding

Seperti namanya, ia digunakan untuk membandingkan sesuatu. Di Java, Comparator ialah antara muka untuk menyusun objek tersuai. Kita boleh menulis logik kita sendiri untuk mengisih objek yang ditentukan dalam kaedah terbina dalamnya bernama 'compare()'. Kaedah ini menerima dua objek sebagai parameter dan mengembalikan nilai integer. Melalui nilai integer ini, Comparator menentukan objek yang lebih besar

Tatabahasa

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));
      }
   }
}
Terjemahan bahasa Cina bagi

Contoh 3

ialah:

Contoh 3

Contoh di bawah menunjukkan penggunaan Comparator semasa membetulkan ClassCastException.

Kaedah

  • Mula-mula, import pakej 'java.util' supaya kita boleh menggunakan TreeSet

  • Buat kelas yang dipanggil 'TrMap'. Di dalam kelas, isytiharkan dua pembolehubah dan tentukan pembina yang mempunyai dua parameter 'item' dan 'harga', iaitu jenis rentetan dan jenis integer masing-masing.

  • Bergerak lebih jauh, kami akan menggunakan kaedah 'toString()' untuk menukar data objek kepada rentetan

  • Kemudian, tentukan kelas lain 'Comp' yang melaksanakan antara muka Comparator, dan gunakan kaedah 'compare()' di dalamnya untuk mengisih TreeMap dalam tertib menaik.

  • Dalam kaedah 'main()', buat koleksi TreeMap dengan menghantar contoh kelas 'Comp' untuk mengisih

    • Akhir sekali, gunakan kaedah 'put()' untuk menyimpan beberapa elemen ke dalam koleksi TreeMap dan kemudian mencetak hasilnya.

    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以及如何修复这个异常。

Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan isu java.lang.ClassCastException semasa menggunakan TreeMap dalam Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam