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:填充集合
在树状图
中用作键的类(interfaceSortedMap
的实现之一)必须实现interfaceCompariable
,或者必须通过向构造函数提供比较器
来创建树状图
您正在尝试对键使用哈希集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)