0

List<Set<String>>要素をからにコピーしたいのですが、SortedMap<Set<String>,Integer>常に次のようになります。

java.lang.ClassCastException: java.util.HashSet cannot be cast to java.lang.Comparable. (or HashMap could be a TreeSet too, vice versa)

私が読んでいるいくつかの場所はそれが不可能だと言っていますが、これは正しいですか?

元のリストやセットをマップにコピーできないなんて信じられません。

これは私が試したことです:

List<Set<String> > tempnewOut= new ArrayList<>(); 
SortedMap<Set<String>,Integer> freqSetsWithCount= new TreeMap<>(); 
for (Set<String> set : tempnewOut) 
{ 
    freqSetsWithCount.put(set, 0); 
}
4

4 に答える 4

2

TreeMap(interfaceの実装の1つ)でキーとして使用するクラスは、interfaceをSortedMap実装するか、コンストラクターにを提供してをComparable作成する必要があります。TreeMapComparator

キーにを使用しようとしてHashSet<String>います。HashSetを実装しておらずComparable、を提供していないComparatorため、を取得しClassCastExceptionます。

TreeMap1つの解決策は、コンストラクターにaを渡して作成することComparatorです。マップでセットを並べ替える方法を指定するには、のcompareメソッドを実装する必要があります。Comparator

List<Set<String>> list = new ArrayList<>();

Comparator<Set<String>> comparator = new Comparator<Set<String>>() {
    @Override
    public int compare(Set<String> o1, Set<String> o2) {
        // TODO: Implement your logic to compare the sets
    }
};

SortedMap<Set<String>, Integer> set = new TreeMap<>(comparator);

// TODO: Fill the set
于 2012-11-28T13:13:28.390 に答える
1

SortedMapは、その名前が示すように、ソートされた要素のマップです。この方法で要素をソートできるようにするには、Comparableインターフェースをその中の要素に実装する必要があります。

使用しているセットのリストは、Comparableインターフェイスを実装していないため、Comparableを実装するものに変換せずに、リストのセットをSortedMapのセット内に配置することはできません。恐れ...

于 2012-11-28T13:18:13.913 に答える
0

Set100%確信はありませんが、インターフェイスはインターフェイスを拡張していないと思いComparableます。ただし、sortedMapでオブジェクトをキーとして使用するには、を実装する必要がありますComparable

これは論理的なことであり、一方のインスタンスがもう一方のインスタンスよりも大きいか、等しいか、小さいかがわからない場合は、何も並べ替えることができません...

他の人と同じように、意味がある場合は整数をキーとして使用することをお勧めします。

于 2012-11-28T13:12:25.360 に答える
0

SortedMapでは、キー(あなたの場合はハッシュセット)がそれをソートするための同等のインターフェースを実装している必要があります。

Hashsetはそれを実装していないため、SortedMap実装でタイプキャストすることはできません。ハッシュマップを拡張し、それを機能させるために同等の実装を行う独自のセットを作成できます。

整数で並べ替える場合は、キーと値を切り替えるだけです。

SortedMap<Integer,Set<String>>

javadocは私にはかなり明確です

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/SortedMap.html

于 2012-11-28T13:12:39.543 に答える