TreeMap は、NavigableMap インターフェイスを実装する Java Collection Framework のクラスです。これは、マップの要素をツリー構造に保存し、キーと値のペアを並べ替えられた順序で保存するための効率的な代替手段を提供します。 TreeMap オブジェクトの作成中は、その要素の並べ替え順序を維持できるように Comparable インターフェイスまたは Comparator インターフェイスを使用する必要があることに注意してください。そうしないと、java.lang.ClassCastException が発生します。この記事では、Comparable インターフェイスと Comparator インターフェイスを使用して TreeMap の ClassCastException 問題を解決する方法を説明します。
TreeMap で ClassCastException を表示するサンプル プログラムから説明を始めましょう。
次の例では、Java コンパイラが java.lang.ClassCastException をスローする場合の状況を示すために、Comparable インターフェイスと Comparator インターフェイスを使用せずにカスタム クラス オブジェクトを TreeMap に追加しようとします。
rreeimport 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); } }
Comparable インターフェイスの紹介から議論を始めましょう
このインターフェイスは、カスタム オブジェクトを自然な順序で並べ替えたい場合に非常に便利です。たとえば、文字列を辞書編集順に並べ替え、数値を数値順に並べ替えます。このインターフェースは「java.lang」パッケージで利用できます。通常、このパッケージで定義されたクラスとインターフェイスはデフォルトで使用できるため、このパッケージを明示的にインポートする必要はありません。
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)
ここで、class はクラスを作成するためのキーワードであり、implements はインターフェイスによって提供される機能を有効にするためのキーワードです。
Comparable インターフェイスは、オブジェクトのコレクションを並べ替えるためにオーバーライドできる 'CompareTo' という名前のメソッドを 1 つだけ定義します。これは、クラスのオブジェクトをそれ自体と比較する機能を与えます。'この' オブジェクトの場合、0 を返します。は渡されたオブジェクトと等しく、「この」オブジェクトの方が大きい場合は正の値、それ以外の場合は負の値です。
class nameOfclass implements Comparable<nameOfclass>
次の例は、ClassCastException を修復する際の Comparable の使用法を示しています。
###方法###
compareTo(nameOfclass nameOfobject);
コンパレータ
という名前の組み込みメソッドで、指定されたオブジェクトを並べ替える独自のロジックを作成できます。このメソッドは 2 つのオブジェクトをパラメータとして受け取り、整数値を返します。この整数値を通じて、コンパレータはどのオブジェクトが大きいかを決定します。 文法
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)); } } }
###方法###
「TrMap」という名前のクラスを作成します。クラス内で 2 つの変数を宣言し、それぞれ文字列型と整数型の 2 つのパラメーター「item」と「price」を持つコンストラクターを定義します。
次に、Comparator インターフェイスを実装する別のクラス 'Comp' を定義します。このクラスでは、'compare()' メソッドを使用して TreeMap を昇順に並べ替えます。
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); } }
Elements of the map: {Item: TShirt, Price: 495=1, Item: Shirt, Price: 660=2}
在本文中,我们首先定义了TreeMap类,然后介绍了TreeMap中的ClassCastException。在下一部分中,我们讨论了可以帮助解决这个ClassCastException的Comparator和Comparable接口。然后,我们看到了三个示例程序,展示了ClassCastException以及如何修复这个异常。
以上がJavaでTreeMapを使用しているときにjava.lang.ClassCastExceptionの問題を解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。