>  기사  >  Java  >  Java에서 TreeMap을 사용하는 동안 java.lang.ClassCastException 문제를 해결하는 방법은 무엇입니까?

Java에서 TreeMap을 사용하는 동안 java.lang.ClassCastException 문제를 해결하는 방법은 무엇입니까?

王林
王林앞으로
2023-08-20 23:55:101088검색

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에 사용자 정의 클래스 객체를 추가하려고 합니다.

아아아아

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'라는 단일 메서드만 정의합니다. 이는 클래스의 객체를 자신과 비교할 수 있는 기능을 제공합니다. 'this' 객체가 동일하면 0을 반환합니다. 전달된 객체에 'this' 객체가 더 크면 양수 값이고, 그렇지 않으면 음수 값입니다.

문법

class nameOfclass implements Comparable<nameOfclass>

예 2

의 중국어 번역은 다음과 같습니다.

예 2

다음 예에서는 ClassCastException을 수정하는 데 Comparable을 사용하는 방법을 보여줍니다.

방법

  • Comparable 인터페이스를 구현하는 'TrMap' 클래스를 만듭니다. 클래스 내에서 두 개의 변수를 선언하고 문자열 유형과 double 'item' 및 'price'의 두 매개변수를 사용하여 생성자를 정의합니다.

  • 더 나아가 'toString()' 메서드를 사용하여 객체의 데이터를 문자열로 변환해 보겠습니다. 그런 다음 'compareTo' 메소드를 정의하고 'TrMap' 클래스의 객체를 매개변수로 전달하여 'this' 객체를 새로 생성된 객체와 비교합니다.

  • 이제 main() 메소드에서 'obj'라는 TreeMap 클래스의 객체를 선언하고 'put()'이라는 내장 메소드를 사용하여 객체 세부정보를 여기에 저장합니다. 'item'이 키이고 해당 값은 'price'입니다.

  • 마지막으로 for-each 루프에서 'keySet()' 메서드를 사용하여 키와 관련된 값을 검색하고 인쇄합니다.

rreee

Output

의 중국어 번역은

output

compareTo(nameOfclass nameOfobject);
입니다.

Comparator를 사용하여 java.lang.ClassCastException 문제를 해결하는 방법

먼저 비교기 인터페이스를 소개하겠습니다.

비교기

이름에서 알 수 있듯이 무언가를 비교할 때 사용됩니다. Java에서 Comparator는 사용자 정의 개체를 정렬하기 위한 인터페이스입니다. 'compare()'라는 내장 메서드에서 지정된 개체를 정렬하는 자체 논리를 작성할 수 있습니다. 이 메서드는 두 개체를 매개 변수로 받아들이고 정수 값을 반환합니다. 이 정수 값을 통해 비교기는 어떤 객체가 더 큰지 결정합니다.

문법

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'이라는 클래스를 만듭니다. 클래스 내부에 두 개의 변수를 선언하고 각각 문자열 유형과 정수 유형인 '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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제