我有一个包含一些字符串和这些字符串的频率的树形图。 我想根据频率进行排序,因此我决定编写一个自定义比较器。 这段代码有什么问题?它抛出异常。
TreeMap<String, Integer> map = new TreeMap(new Comparator<Map.Entry<String, Integer>>(){
public int compare(Map.Entry<String, Integer> m1, Map.Entry<String, Integer> m2) {
return m2.getValue() - m1.getValue();
}
});
异常
java.lang.ClassCastException: class java.lang.String cannot be cast to class java.util.Map$Entry (java.lang.String and java.util.Map$Entry are in module java.base of loader 'bootstrap')
您使用的比较器类型错误。 构造函数如下:
public TreeMap(Comparator<? super K> comparator)
其中
K
是 Map
的密钥类型。
这意味着您需要将
Comparator<String>
传递给构造函数。
您想使用值对
Map
进行排序,但使用构造函数是不可能的。您需要使用 entrySet()
和您当前使用的比较器手动对条目进行排序。