2013-11-08 5 views
-1

Я пытаюсь сортировать 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); 

получил сообщение об ошибке при компиляции:

Исключение в нити «основной» java.lang .ClassCastException: java.lang.String не может быть отнесено к java.util.Map $ Entry

Каков правильный способ сделать это?

Спасибо за ответы, но в это Java-документ, он говорит: «Карта сортируется в соответствии с естественным порядком его ключами, или компаратором, предоставленным на карту времени создания», так как поставить его Компаратор, сортирующий по его значениям?

+1

Нет правильного способа сделать это. В Java нет структуры данных, которая поддерживает 'ConcurrentMap', а также сортирует по значению. –

+1

Это не имеет никакого смысла ... как вы могли бы найти что-нибудь в skiplist по ключу, если оно не отсортировано по ключу? – Affe

+3

«Компаратор» предназначен для ключей, а не для записей карты ... –

ответ

0

Для того, чтобы работать, необходимо использовать список SkipList. Это действительно намного больше похоже на дерево, чем на хэш-карту, как это выглядит. (Имя «Карта» в реализации java означает указание, что оно реализует интерфейс «Карта», не означает, что он является кузеном HashMap или ConcurrentHashMap в качестве фактической структуры данных.)

Это «Пропуск» в разные точки список основан на результате сравнения ключа поиска с текущим уровнем узла и сужается там, где в списке находится ключ, который вы ищете. Если он не отсортирован, вы будете просто тупиком или прыгаете навсегда и никогда не найдете ничего.

Смежные вопросы