


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 bagiContoh 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 bagiOutput
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>
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.
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)); } } }
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!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas





Panduan Nombor Sempurna di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor Perfect dalam Java?, contoh dengan pelaksanaan kod.

Panduan untuk Weka di Jawa. Di sini kita membincangkan Pengenalan, cara menggunakan weka java, jenis platform, dan kelebihan dengan contoh.

Panduan untuk Nombor Smith di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor smith di Jawa? contoh dengan pelaksanaan kod.

Dalam artikel ini, kami telah menyimpan Soalan Temuduga Spring Java yang paling banyak ditanya dengan jawapan terperinci mereka. Supaya anda boleh memecahkan temuduga.

Java 8 memperkenalkan API Stream, menyediakan cara yang kuat dan ekspresif untuk memproses koleksi data. Walau bagaimanapun, soalan biasa apabila menggunakan aliran adalah: bagaimana untuk memecahkan atau kembali dari operasi foreach? Gelung tradisional membolehkan gangguan awal atau pulangan, tetapi kaedah Foreach Stream tidak menyokong secara langsung kaedah ini. Artikel ini akan menerangkan sebab -sebab dan meneroka kaedah alternatif untuk melaksanakan penamatan pramatang dalam sistem pemprosesan aliran. Bacaan Lanjut: Penambahbaikan API Java Stream Memahami aliran aliran Kaedah Foreach adalah operasi terminal yang melakukan satu operasi pada setiap elemen dalam aliran. Niat reka bentuknya adalah

Panduan untuk TimeStamp to Date di Java. Di sini kita juga membincangkan pengenalan dan cara menukar cap waktu kepada tarikh dalam java bersama-sama dengan contoh.

Kapsul adalah angka geometri tiga dimensi, terdiri daripada silinder dan hemisfera di kedua-dua hujungnya. Jumlah kapsul boleh dikira dengan menambahkan isipadu silinder dan jumlah hemisfera di kedua -dua hujungnya. Tutorial ini akan membincangkan cara mengira jumlah kapsul yang diberikan dalam Java menggunakan kaedah yang berbeza. Formula volum kapsul Formula untuk jumlah kapsul adalah seperti berikut: Kelantangan kapsul = isipadu isipadu silinder Dua jumlah hemisfera dalam, R: Radius hemisfera. H: Ketinggian silinder (tidak termasuk hemisfera). Contoh 1 masukkan Jejari = 5 unit Ketinggian = 10 unit Output Jilid = 1570.8 Unit padu menjelaskan Kirakan kelantangan menggunakan formula: Kelantangan = π × r2 × h (4

Java ialah bahasa pengaturcaraan popular yang boleh dipelajari oleh pembangun pemula dan berpengalaman. Tutorial ini bermula dengan konsep asas dan diteruskan melalui topik lanjutan. Selepas memasang Kit Pembangunan Java, anda boleh berlatih pengaturcaraan dengan mencipta program "Hello, World!" Selepas anda memahami kod, gunakan gesaan arahan untuk menyusun dan menjalankan program, dan "Hello, World!" Pembelajaran Java memulakan perjalanan pengaturcaraan anda, dan apabila penguasaan anda semakin mendalam, anda boleh mencipta aplikasi yang lebih kompleks.
