转载请注明出处:http://blog.youkuaiyun.com/ns_code/article/details/36421085
前言
本文不打算延续前几篇的风格(对所有的源码加入注释),因为要理解透TreeMap的所有源码,对博主来说,确实需要耗费大量的时间和经历,目前看来不大可能有这么多时间的投入,故这里意在通过于阅读源码对TreeMap有个宏观上的把握,并就其中一些方法的实现做比较深入的分析。
红黑树简介
TreeMap是基于红黑树实现的,这里只对红黑树做个简单的介绍,红黑树是一种特殊的二叉排序树,关于二叉排序树,参见:http://blog.youkuaiyun.com/ns_code/article/details/19823463,红黑树通过一些限制,使其不会出现二叉树排序树中极端的一边倒的情况,相对二叉排序树而言,这自然提高了查询的效率。
二叉排序树的基本性质如下:
1、每个节点都只能是红色或者黑色
2、根节点是黑色
3、每个叶节点(NIL节点,空节点)是黑色的。
4、如果一个结点是红的,则它两个子节点都是黑的。也就是说在一条路径上不能出现相邻的两个红色结点。
5、从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。
正是这些性质的限制,使得红黑树中任一节点到其子孙叶子节点的最长路径不会长于最短路径的2倍,因此它是一种接近平衡的二叉树。

本文简要介绍了Java集合类中的TreeMap,它基于红黑树数据结构实现。文章探讨了红黑树的基本性质,强调了其在平衡二叉树中的优势。接着概述了TreeMap的存储结构、构造方法以及插入删除操作,指出插入删除后需进行红黑树的调整以保持特性。最后,总结了TreeMap与HashMap的区别,包括排序、性能和key的限制。
最低0.47元/天 解锁文章
697

被折叠的 条评论
为什么被折叠?



