Java TreeMap 按值比较器排序 - 为什么这会抛出 ClassCastException

问题描述 投票:0回答:1

我有一个包含一些字符串和这些字符串的频率的树形图。 我想根据频率进行排序,因此我决定编写一个自定义比较器。 这段代码有什么问题?它抛出异常。

        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')
java comparator
1个回答
1
投票

您使用的比较器类型错误。 构造函数如下:

public TreeMap(Comparator<? super K> comparator)

其中

K
Map
的密钥类型。

这意味着您需要将

Comparator<String>
传递给构造函数。

您想使用值对

Map
进行排序,但使用构造函数是不可能的。您需要使用
entrySet()
和您当前使用的比较器手动对条目进行排序。

© www.soinside.com 2019 - 2024. All rights reserved.