0

我想将我的元素从 a 复制List<Set<String>>到 aSortedMap<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您在 a (接口的实现之一)中用作键的类SortedMap必须实现 interface Comparable,或者您必须TreeMap通过向构造函数提供 aComparator来创建 。

您正在尝试使用 aHashSet<String>作为键。HashSet没有实现Comparable,而且你没有提供 a Comparator,所以你得到了ClassCastException.

一种解决方案是TreeMap通过将 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

A SortedMap is, as the name implies, a Map of sorted elements. To be able to sort elements in this manner, the Comparable interface has to be implemented on the elements inside it.

The List of Sets that you're working with, doesn't implement the Comparable interface, so you aren't able to simply put the Set from your List inside the Set of your SortedMap without converting them to something that implements Comparable I'm afraid...

于 2012-11-28T13:18:13.913 回答
0

我不是 100% 确定,但我认为Set接口不会扩展Comparable接口。但是为了在 sortedMap 中使用对象作为 Key,它需要实现Comparable.

这是合乎逻辑的,如果您不知道一个实例是否大于、等于或小于另一个实例,则无法对任何内容进行排序......

像其他人一样,我建议您使用 Integer 作为 Key 如果这有意义的话。

于 2012-11-28T13:12:25.360 回答
0

SortedMap 要求键(您的情况是哈希集)实现可比较的接口来对其进行排序。

Hashset 没有实现它,因此它不能在 SortedMap 实现中进行类型转换。您可以编写自己的 Set 来扩展 hashmap 并实现可比的以使其工作。

如果你想按整数排序,只需切换键和值

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 回答