今天写代码过程中用到了TreeMap, 之前了解到要使用TreeMap,必须明确指定它所使用的排序方法,即在TreeMap的构造方法中指定所使用的排序方式,但是我查看了TreeMap的api,看到有无参的构造方法,心想既然TreeMap有无参的构造方法,那么它应该有默认的排序方法,所以在使用TreeMap的时候就没有指定排序方法,但是在使用过程中,当我第一次调用put方法时,程序没有错误,当我第二次put时,程序抛出了ClassCastException异常。
从提示来看,是TreeMap的put()方法出了问题,提示的内容是我插入的key(AddFun类的实例)不能转换为Comparable. 不多说,查看TreeMap的源代码找答案。TreeMap无参构造方法
该构造方法指出,所有插入到TreeMap的key都必须实现Comparable接口,在看看put方法
当要插入的key不能与treemap中存在的key进行比较的时候会抛出ClassCastException异常。所以第一次插入时,因为treemap为空,不需要比较;当第二次插入到treemap中,treemap为了保证数据有序必须要比较两个key,但是它不知道如何比较,所以抛出ClassCastException异常。