如何按值对ConcurrentSkipListMap进行排序?

时间:2013-11-08 17:20:52

标签: java sorting concurrentskiplistmap

我正在尝试按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);

编译时收到错误消息:

  

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

这样做的正确方法是什么?

感谢您的回答,但是在它的Java文档中,它说“地图按照其键的自然顺序排序,或在地图创建时提供的比较器”,所以如何为它提供一个按其值排序的比较器?

1 个答案:

答案 0 :(得分:0)

必须按键对SkipList进行排序才能工作。在它看起来的方式中,它实际上更像是一棵树而不是一个hashmap。 (java实现中的名称'Map'表示它实现了Map接口,不应该暗示它是HashMap或ConcurrentHashMap的表兄作为实际的数据结构。)

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

相关问题