使用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

如何使用预先排序的数据初始化 TreeMap?

javascript中怎么用treemap

常用的几个JQuery代码片段

在TreeSet和TreeMap中使用hashCode()和equals()

如何遍历TreeMap的PORTION?