问题: 出现ClassCastException
见下图 :
图片描述
程序代码如下:
import java.util.*;
import net.mindview.util.*;
class Words
{
String s ;
int i ;
public Words (String s , int i )
{
this . s = s ;
this . i = i ;
}
}
public class HoldingEx22 {
public static void main(String[] args)
{
Set<String> words = new TreeSet<String>(
new TextFile("SetOperations.java", "\\W+"));
System.out.println(words);
Set <Words> wordSet = new TreeSet <Words> ( ) ;
System.out.println( );
for (String s : words)
{
int count = 0;
for (String m : words)
{
if (s . equals (m) )
{
count ++ ;
}
}
Words w = new Words (s , count - 1);
wordSet . add (w ) ;
}
System.out.println(wordSet);
}
}
TreeSet
は、順序付けされたデータ構造です。内部要素は、相互にサイズを比較する方法を認識する必要があります。したがって、TreeSet
に配置できるクラス オブジェクトは、構築されたComparable
インターフェイスを実装する必要があります。Integer, String
などのオブジェクトでは、このインターフェースは実装されていますが、自分で作成したWords
クラスは実装されていないため、エラーが報告されます。Comaparable
インターフェースに関するいくつかの情報: http://stackoverflow.com/questions/3718383/why-Should-a-java-class-implement-comparableコードがさまざまな単語をカウントしたいと考えているようですが、
Set
は繰り返される要素を 1 回しか保存しないため、System.out.println(words)
の出力結果はすべて反復しない単語となり、その後のカウントは無意味になります。は
Map<String, Integer>
を使用して直接カウントできるため、Words
クラスを実装する必要はありません。