2013-02-22 1 views
0

Я использую:Как решить ClassCastException при использовании BitSet в качестве ключа в Java Map

Map <BitSet,Double> Mymap=new TreeMap<>(); 

Когда я пытаюсь позвонить:

Mymap.contains(someBitSetObject) 

Я получаю следующее сообщение об ошибке времени выполнения:

Exception in thread "main" java.lang.ClassCastException: java.util.BitSet cannot be cast to java.lang.Comparable 
    at java.util.TreeMap.getEntry(TreeMap.java:343) 
    at java.util.TreeMap.containsKey(TreeMap.java:227) 

Хотя класс BitSet имеет свой собственный метод equals, TreeMap не вызывает его. Я застрял. Как проверить, содержит ли MyMap ключ, и мне нужен ключ типа BitSet?

Пожалуйста, помогите.

Благодаря

ответ

4

TreeMap полагается на ключи быть сортировкой - не просто equatable:

The map is sorted according to the natural ordering of its keys, or by a Comparator provided at map creation time, depending on which constructor is used.

BitSet не реализует Comparable. Либо вам необходимо предоставить Comparator<BitSet> конструктору TreeMap, либо использовать другой вид карты. Если вам не нужен порядок сортировки, используйте HashMap или LinkedHashMap. Если вы do заботитесь о порядке сортировки, вам нужно будет заказать этот заказ.

+0

Я не использую никаких функций. Проблема с map.containsKey – Kaur

+1

Вы используете 'TreeMap'. Я советую вам изучить Джавадок классов, которые вы используете. –

+0

@ItsKaur: из документации «TreeMap»: «Карта сортируется в соответствии с естественным порядком ее ключей» - так что да, вы * * используете функцию сортировки. –

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