使用TreeMap时需要注意的问题
Posted quincy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用TreeMap时需要注意的问题相关的知识,希望对你有一定的参考价值。
什么是TreeMap
treemap是java.util.Map的一个实现类,TreeMap实现SortedMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator遍历TreeMap时,得到的记录是排过序的。如果使用排序的映射,建议使用TreeMap。在使用TreeMap时,key必须实现Comparable接口或者在构造TreeMap传入自定义的Comparator,否则会在运行时抛出java.lang.ClassCastException类型的异常。
关于java.lang.ClassCastException异常
通常遇到这个异常的原因是强制类型转换时报错,在强制类型转换时,需要注意,父类引用指向的对象的类型是子类的时候才可以进行强制类型转换,如果父类引用指向的对象的类型不是子类的时候将产生java.lang.ClassCastException异常。
Animal a1 = new Dog(); // 1
Animal a2 = new Cat(); // 2
Dog d1 = (Dog)a1; //3
Dog d2 = (Dog)a2; //4
在这个demo中,第三行可以进行强转,但是第四行会抛出java.lang.ClassCastException异常,因为a2是animal,但是具体实现类型是cat,不能直接强转为dog类型。
遇到这样的异常的时候如何解决呢?如果你知道要访问的的对象的具体类型,直接转换成该类型即可。如果不能确定类型可以通过下面的两种方式进行处理(假设对象为o):
1、通过o.getClass().getName()得到具体的类型,可以通过输出语句输出这个类型,然后根据类型进行进行具体的处理。
2、通过if(o instanceof 类型)的语句来判断o的类型是什么。
以上是关于使用TreeMap时需要注意的问题的主要内容,如果未能解决你的问题,请参考以下文章
java中的排序--排序容器_TreeSet与TreeMap