Java 为什么可以';t我复制/转换列表<;设置<;字符串>&燃气轮机;进入分类地图<;设置<;字符串>;,整数>;?

Java 为什么可以';t我复制/转换列表<;设置<;字符串>&燃气轮机;进入分类地图<;设置<;字符串>;,整数>;?,java,list,map,Java,List,Map,我想将我的元素从列表复制到分类地图, 但我总是得到: 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> &

我想将我的元素从
列表
复制到
分类地图
, 但我总是得到:

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); 
}
List tempnewOut=newarraylist();
SortedMap FrequesetWithCount=新树映射();
for(设置:tempnewOut)
{ 
frequesetswithcount.put(set,0);
}

我不是100%确定,但我认为
集合
接口没有扩展
可比
接口。但为了将对象用作sortedMap中的键,它需要实现
Compariable

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


像其他人一样,如果有意义的话,我建议您使用整数作为键。

我不是100%确定,但我认为
集合
接口并没有扩展
可比
接口。但为了将对象用作sortedMap中的键,它需要实现
Compariable

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


与其他方法一样,如果有任何意义,我建议您使用整数作为键。

SortedMap要求键(您的案例是hashset)实现可比较的接口来对其进行排序

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

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

SortedMap<Integer,Set<String>>
SortedMap
javadoc对我来说很清楚


SortedMap要求键(您的案例是hashset)实现可比较的接口来对其进行排序

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

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

SortedMap<Integer,Set<String>>
SortedMap
javadoc对我来说很清楚


树形映射中用作键的类(接口
SortedMap
的一个实现)必须实现接口
Comparable
,或者必须通过向构造函数提供
比较器来创建
树形映射

您正在尝试对键使用
哈希集
HashSet
没有实现
Comparable
,并且您没有提供
比较器,因此您得到了
ClassCastException

一种解决方案是通过将
比较器
传递给构造函数来创建
TreeMap
。您必须实现
Comparator
compare
方法来指定集合在映射中的排序方式

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
List List=new ArrayList();
比较器比较器=新比较器(){
@凌驾
公共整数比较(集合o1,集合o2){
//TODO:实现逻辑以比较集合
}
};
SortedMap集合=新树形图(比较器);
//TODO:填充集合

树状图
中用作键的类(interface
SortedMap
的实现之一)必须实现interface
Compariable
,或者必须通过向构造函数提供
比较器
来创建
树状图

您正在尝试对键使用
哈希集
HashSet
没有实现
Comparable
,并且您没有提供
比较器,因此您得到了
ClassCastException

一种解决方案是通过将
比较器
传递给构造函数来创建
TreeMap
。您必须实现
Comparator
compare
方法来指定集合在映射中的排序方式

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
List List=new ArrayList();
比较器比较器=新比较器(){
@凌驾
公共整数比较(集合o1,集合o2){
//TODO:实现逻辑以比较集合
}
};
SortedMap集合=新树形图(比较器);
//TODO:填充集合

正如名称所示,SortedMap是已排序元素的映射。为了能够以这种方式对元素进行排序,必须在其中的元素上实现可比较的接口


您正在使用的集合列表没有实现可比较的接口,因此您无法简单地将列表中的集合放入SortedMap集合中,而不将它们转换为实现可比较的集合,我担心…

SortedMap,顾名思义,是排序元素的映射。为了能够以这种方式对元素进行排序,必须在其中的元素上实现可比较的接口


您正在使用的集合列表没有实现可比较的接口,因此您无法简单地将列表中的集合放在SortedMap集合中,而不将它们转换为实现可比较的集合。恐怕…

请添加您拥有的代码,因为如果没有这些代码,我们无法真正帮助您…List tempnewOut=new ArrayList();SortedMap FrequesetWithCount=新树映射();对于(Set:tempnewOut){freqSetsWithCount.put(Set,0);}@GaborToth。。。你能读一下你发表的评论吗?请编辑您的问题并在那里添加您的代码。请添加您的代码,因为没有这些,我们无法真正帮助您…List tempnewOut=new ArrayList();SortedMap FrequesetWithCount=新树映射();for(设置:tempnew)