-
-
- TreeMap源码分析
-
TreeMap是一个有序的key-value集合,它是通过红黑二叉树(Red-Black tree)来实现的。我们打开TreeMap的源码,发现里面有一行核心代码:
在源码中,成员变量root用来存储整个树的根节点,我们再继续跟踪Entry(它是TreeMap的内部类)的代码:
可以看到里面存储了本身数据、左节点、右节点、父节点以及节点颜色,从这里我们就能确定TreeMap底层采用的就是红黑二叉树来实现。
TreeMap基于红黑树实现,TreeMap中支持2种排序方式,方式一:根据其键的自然顺序进行排序(也就是使用Comparable接口来排序),方式二:根据创建映射时提供的Comparator接口进行排序,具体取决于其使用的构造方法,常用的构造方法如下:
方法名 | 说明 |
public TreeMap() | 创建一个空TreeMap,keys按照自然排序 |
public TreeMap(Comparator<? super K> comparator) | 创建一个空TreeMap,按照指定的comparator排序 |
TreeMap和HashMap用法大致相同,不同点是TreeMap可以用来排序,HashMap和TreeMap比较:
1、HashMap是key无序的(key可以为null),而TreeMap是key有序的(key不能为null)。 2、HashMap效率略高于TreeMap,在需要排序的Map时才选用TreeMap。 |