1

我正在尝试在 Java 中按值对 ConcurrentSkipListMap 进行排序,这是我的代码:

ConcurrentSkipListMap<String,Float> cslMap = new ConcurrentSkipListMap(new Comparator() {
    public int compare(Object o1,Object o2) {
        return ((Comparable)((Map.Entry)(o1)).getValue()).compareTo(((Map.Entry)(o2)).getValue());
    }
});
cslMap_Map.put("B",0.2f);
cslMap_Map.put("A",0.1f);
cslMap_Map.put("C",1f);

编译时收到错误消息:

线程“主”java.lang.ClassCastException 中的异常:java.lang.String 无法转换为 java.util.Map$Entry

正确的方法是什么?

感谢您的回答,但在它的 Java 文档中,它说“地图是根据其键的自然顺序排序的,或者是根据地图创建时提供的 Comparator 排序的”,那么如何为它提供一个按其排序的 Comparator价值观?

4

1 回答 1

0

SkipList 必须按键排序才能工作。在查找事物的方式上,它实际上更像一棵树而不是哈希图。(java实现中的名称'Map'是表示它实现了Map接口,不应暗示它是HashMap或ConcurrentHashMap作为实际数据结构的表亲。)

它根据查找键与当前节点级别的比较结果“跳过”到列表中的不同点,并缩小列表中您要查找的键的位置。如果它没有排序,你只会死路一条,或者永远跳来跳去,永远找不到任何东西。

于 2013-11-08T17:27:57.330 回答