ホームページ  >  記事  >  Java  >  JavaでTreeMapを使用しているときにjava.lang.ClassCastExceptionの問題を解決するにはどうすればよいですか?

JavaでTreeMapを使用しているときにjava.lang.ClassCastExceptionの問題を解決するにはどうすればよいですか?

王林
王林転載
2023-08-20 23:55:101089ブラウズ

JavaでTreeMapを使用しているときにjava.lang.ClassCastExceptionの問題を解決するにはどうすればよいですか?

TreeMap は、NavigableMap インターフェイスを実装する Java Collection Framework のクラスです。これは、マップの要素をツリー構造に保存し、キーと値のペアを並べ替えられた順序で保存するための効率的な代替手段を提供します。 TreeMap オブジェクトの作成中は、その要素の並べ替え順序を維持できるように Comparable インターフェイスまたは Comparator インターフェイスを使用する必要があることに注意してください。そうしないと、java.lang.ClassCastException が発生します。この記事では、Comparable インターフェイスと Comparator インターフェイスを使用して TreeMap の ClassCastException 問題を解決する方法を説明します。

TreeMap の java.lang.ClassCastException 問題を修正

TreeMap で ClassCastException を表示するサンプル プログラムから説明を始めましょう。

例 1

の中国語訳は次のとおりです:

例 1

次の例では、Java コンパイラが java.lang.ClassCastException をスローする場合の状況を示すために、Comparable インターフェイスと Comparator インターフェイスを使用せずにカスタム クラス オブジェクトを TreeMap に追加しようとします。

rree

Output

の中国語訳:

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

Comparable インターフェイスを使用して java.lang.ClassCastException エラーを修正する方法

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 はインターフェイスによって提供される機能を有効にするためのキーワードです。

compareTo() は次のように変換されます。

Comparable インターフェイスは、オブジェクトのコレクションを並べ替えるためにオーバーライドできる 'CompareTo' という名前のメソッドを 1 つだけ定義します。これは、クラスのオブジェクトをそれ自体と比較する機能を与えます。'この' オブジェクトの場合、0 を返します。は渡されたオブジェクトと等しく、「この」オブジェクトの方が大きい場合は正の値、それ以外の場合は負の値です。

文法

class nameOfclass implements Comparable<nameOfclass>

例 2

の中国語訳は次のとおりです:

例 2

次の例は、ClassCastException を修復する際の Comparable の使用法を示しています。

###方法###

    Comparable インターフェイスを実装するクラス 'TrMap' を作成します。クラス内で 2 つの変数を宣言し、文字列型の 2 つのパラメーターと double 'item' および 'price' を含むコンストラクターを定義します。
  • さらに進んで、「toString()」メソッドを使用してオブジェクトのデータを文字列に変換します。次に、「compareTo」メソッドを定義し、クラス「TrMap」のオブジェクトをパラメータとして受け取り、「this」オブジェクトと新しく作成されたオブジェクトを比較します。
  • 次に、main() メソッドで、「obj」という名前の TreeMap クラスのオブジェクトを宣言し、「put()」という名前の組み込みメソッドを使用してオブジェクトの詳細をそのオブジェクトに保存します。 「item」がキーで、それに対応する値は「price」です。
  • 最後に、for-each ループで 'keySet()' メソッドを使用して、キーに関連付けられた値を取得して出力します。
  • うわー
  • Output
の中国語訳:

Output

compareTo(nameOfclass nameOfobject);

Comparator を使用して java.lang.ClassCastException 問題を解決する方法

まず、Comparator インターフェイスを紹介します。

コンパレータ

その名前が示すように、何かを比較するために使用されます。 Java では、Comparator はカスタム オブジェクトを並べ替えるためのインターフェイスです。

'compare()'

という名前の組み込みメソッドで、指定されたオブジェクトを並べ替える独自のロジックを作成できます。このメソッドは 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));
      }
   }
}

例 3

の中国語訳は次のとおりです:

例 3

次の例は、ClassCastException を修復するときの Comparator の使用方法を示しています。

###方法###

まず、TreeSet を使用できるように「java.util」パッケージをインポートします。

  • 「TrMap」という名前のクラスを作成します。クラス内で 2 つの変数を宣言し、それぞれ文字列型と整数型の 2 つのパラメーター「item」と「price」を持つコンストラクターを定義します。

  • さらに進んで、「toString()」メソッドを使用してオブジェクトのデータを文字列に変換します。
  • 次に、Comparator インターフェイスを実装する別のクラス 'Comp' を定義します。このクラスでは、'compare()' メソッドを使用して TreeMap を昇順に並べ替えます。

  • 'main()' メソッドで、並べ替え用の 'Comp' クラスのインスタンスを渡して TreeMap コレクションを作成します。
  • 最後に、「put()」メソッドを使用していくつかの要素を 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);
   }
}

Output

的中文翻译为:

输出

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 サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。