因此,我尝试将一定长度的所有字符串从字符串集合(可以是集合或列表)移动到 TreeMap,并将每个字符串中的字符集设置为该字符串的键
但这条线map.put(keyRinger(word), word);
throws java.lang.ClassCastException: java.util.TreeSet cannot be cast to java.lang.Comparable
Map<Set<Character>, String> map = new TreeMap<Set<Character>, String>();
for (String words : words) {
if (word.length() == length) {
map.put(keyRinger(word), word);
}
}
这是keyRing
如果您好奇的话。
private Set<Character> keyRinger(String current) {
Set<Character> keyRing = new TreeSet<Character>();
for (int i = 0; i < current.length(); i++) {
char key = current.charAt(i);
keyRing.add(key);
}
return keyRing;
}
所以我的问题是我能做些什么来避免这种情况?我读过我需要一个Comparator
或实施Comparable
但我不知道该怎么做,我认为可能有一个更简单的解决方案(尽管可能效率不高)。
你会注意到 javadocTreeMap http://docs.oracle.com/javase/7/docs/api/java/util/TreeMap.html states
映射根据其键的自然顺序进行排序,或者按
在地图创建时提供的比较器,具体取决于哪个
使用构造函数。
所以如果你不提供Comparator http://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html,它将使用自然排序。什么是自然排序? javadoc 的Comparable http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html界面状态
该接口对每个类的对象强加总排序
实现它。这种顺序被称为类的
自然排序,该类的compareTo方法被称为
其自然的比较方法。
所以你的关键要素TreeMap
必须执行Comparable
。您正在尝试使用TreeSet
实例作为你的键TreeMap
. TreeSet http://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html不实施Comparable
.
你得到一个ClassCastException
when TreeMap
尝试将密钥投射到Comparable
参考以便使用其compareTo
方法。
要解决此问题,您应该创建一个TreeMap
通过提供您自己的定制Comparator
用于比较Set<Character>
实例。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)