如何解决Java映射中使用位集作为键时的ClassCastException

如何解决Java映射中使用位集作为键时的ClassCastException,java,equals,classcastexception,bitset,Java,Equals,Classcastexception,Bitset,我正在使用: Map <BitSet,Double> Mymap=new TreeMap<>(); 我遇到以下运行时错误: 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 jav

我正在使用:

Map <BitSet,Double> Mymap=new TreeMap<>();
我遇到以下运行时错误:

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
是否已包含密钥,并且我需要
位集类型的密钥

请帮忙

谢谢

依赖于密钥的可排序性,而不仅仅是可等分性:

映射根据其键的自然顺序进行排序,或者由映射创建时提供的
比较器进行排序,具体取决于使用的构造函数

位集
不实现
可比
。您需要向
TreeMap
构造函数提供
比较器,或者使用不同类型的映射。如果您不关心排序顺序,请使用
HashMap
LinkedHashMap
。如果您确实关心排序顺序,则需要自己进行排序。

依赖于键的可排序性,而不仅仅是可等分性:

映射根据其键的自然顺序进行排序,或者由映射创建时提供的
比较器进行排序,具体取决于使用的构造函数


位集
不实现
可比
。您需要向
TreeMap
构造函数提供
比较器,或者使用不同类型的映射。如果您不关心排序顺序,请使用
HashMap
LinkedHashMap
。如果您确实关心排序顺序,您需要自己进行排序。

我没有使用任何排序功能。问题在于map.contains您使用的是
TreeMap
。我建议您学习所使用的类的Javadoc。@ItsKaur:从
TreeMap
的文档中:“映射是根据其键的自然顺序排序的”-所以是的,您正在使用排序功能。@JonSkeet和Marko:非常感谢:-))我将TreeMap更改为HashMap,它似乎工作了!我没有使用任何排序功能。问题在于map.contains您使用的是
TreeMap
。我建议您学习所使用的类的Javadoc。@ItsKaur:从
TreeMap
的文档中:“映射是根据其键的自然顺序排序的”-所以是的,您正在使用排序功能。@JonSkeet和Marko:非常感谢:-))我将TreeMap更改为HashMap,它似乎工作了!
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)