在Java Map中使用BitSet作为键时如何解决ClassCastException

时间:2013-02-22 10:23:01

标签: java equals classcastexception bitset

我正在使用:

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类型的密钥?

请帮忙。

由于

1 个答案:

答案 0 :(得分:4)

TreeMap依赖于键可排序 - 而不仅仅是等于:

  

地图根据其键的自然顺序排序,或者根据地图创建时提供的Comparator排序,具体取决于使用的构造函数。

BitSet未实施Comparable要么您需要向Comparator<BitSet>构造函数提供TreeMap,或使用其他类型的地图。如果您不关心排序顺序,请使用HashMapLinkedHashMap。如果您关心排序顺序,您需要自己进行排序。