2010-12-13 9 views
0

{3,7,1,90,45,67,54,23,...}の配列を持つバイナリ検索ツリーを作成すると、TreeSetで作業すると良いですが、下のコードで例外がスローされます。私の配列リスト"array"には、それぞれのオブジェクトがtwo fields 1)digit 2)nameである100 objectsが含まれていて、これらのオブジェクトの数字のfield.pleaseでBSTにしたいと思います。バイナリ検索ツリーを作成すると例外がスローされる

 TreeSet<Element> set = null; 
    set = new TreeSet<Element>(); 
    for(Element e :array){ 
     set.add(e); 
    } 

    Iterator it1 = set.iterator(); 

    while (it1.hasNext()) { 
     Object o1 = it1.next(); 
     System.out.println(o1); 
    } 

例外:

ためのラインである
Exception in thread "main" java.lang.ClassCastException: OBST.Element cannot be cast to java.lang.Comparable 
    at java.util.TreeMap.put(TreeMap.java:542) 
    at java.util.TreeSet.add(TreeSet.java:238) 
    at OBST.GreedyVersion.<init>(GreedyVersion.java:25) 
    at OBST.GreedyVersion.main(GreedyVersion.java:66) 

set.add(e);

答えて

6

これは本当に悪い質問です。あなたの他の質問(とここ)で、あなたは{3,7,1,90,45,67,54,23,...}があると言います。しかしあなたはあなたのセットをTreeSet<Element> setと宣言しています。あなたは本当に何を持っていますか?あなたは整数の配列を持っていますか?または、それはElementsの配列ですか?

それは本当に要素の配列だ場合は、エラーメッセージは、問題があるまさに言い、あなたの要素のクラスがComparable

+0

はい、あなたは正しいです、私はそれを得る! – user472221

4

あなたElementクラスはTreeSetによって必要とされるComparableインタフェースを実装していない実装する必要があります。

ElementComparableインターフェイスを実装すると、compareToメソッドを実装することが強制されます。これはタイプElementランクのお互いに対するオブジェクトの仕方を定義します。これはTreeSetによって必要とされ、どのようにして各Elementをツリーに配置するのかを知るようになります。

0

Javaでは、ソート可能な要素はTreeSetでのみサポートされています。要素をソート可能にするには、Comparable interfaceを実装する必要があります。

0

あなたが追加しようとしている要素がComparableインターフェイスを実装していないため、このエラーが発生していると思います。どのようなタイプの配列ですか?

関連する問題