我正在尝试按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文档中,它说“地图按照其键的自然顺序排序,或在地图创建时提供的比较器”,所以如何为它提供一个按其值排序的比较器?
答案 0 :(得分:0)
必须按键对SkipList进行排序才能工作。在它看起来的方式中,它实际上更像是一棵树而不是一个hashmap。 (java实现中的名称'Map'表示它实现了Map接口,不应该暗示它是HashMap或ConcurrentHashMap的表兄作为实际的数据结构。)
根据将查找键与当前节点级别进行比较的结果,“跳过”到列表中的不同点,并缩小列表中您要查找的键的位置。如果它没有排序,你将只是死路一条或永远跳,永远不会找到任何东西。