我正在尝试在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 文档中,它说"映射根据其键的自然顺序排序,或者由映射创建时提供的比较器排序",那么如何为其提供按其值排序的比较器?
SkipList 必须按键排序才能工作。 它实际上更像是一棵树,而不是一个哈希图,因为它查找事物的方式。 (java 实现中的名称"Map"表示它实现了 Map 接口,不应暗示它是 HashMap 或 ConcurrentHashMap 作为实际数据结构的表亲。
它根据将查找键与当前节点级别进行比较的结果"跳过"到列表中的不同点,并缩小您要查找的键在列表中的位置。 如果不排序,你只会死胡同或永远跳来跳去,什么也找不到。