WEB开发网
开发学院软件开发Java 通过分析 JDK 源代码研究 TreeMap 红黑树算法实现... 阅读

通过分析 JDK 源代码研究 TreeMap 红黑树算法实现

 2010-05-31 00:00:00 来源:WEB开发网   
核心提示: {aaa=80.0,bbb=89.0,ccc=89.0,zzz=80.0}TreeMap 的添加节点红黑树红黑树是一种自平衡排序二叉树,树中每个节点的值,通过分析 JDK 源代码研究 TreeMap 红黑树算法实现(3),都大于或等于在它的左子树中的所有节点的值,并且小于或等于在它的右子树中的所

 {aaa=80.0, bbb=89.0, ccc=89.0, zzz=80.0} 

TreeMap 的添加节点

红黑树

红黑树是一种自平衡排序二叉树,树中每个节点的值,都大于或等于在它的左子树中的所有节点的值,并且小于或等于在它的右子树中的所有节点的值,这确保红黑树运行时可以快速地在树中查找和定位的所需节点。

对于 TreeMap 而言,由于它底层采用一棵“红黑树”来保存集合中的 Entry,这意味这 TreeMap 添加元素、取出元素的性能都比 HashMap 低:当 TreeMap 添加元素时,需要通过循环找到新增 Entry 的插入位置,因此比较耗性能;当从 TreeMap 中取出元素时,需要通过循环才能找到合适的 Entry,也比较耗性能。但 TreeMap、TreeSet 比 HashMap、HashSet 的优势在于:TreeMap 中的所有 Entry 总是按 key 根据指定排序规则保持有序状态,TreeSet 中所有元素总是根据指定排序规则保持有序状态。

为了理解 TreeMap 的底层实现,必须先介绍排序二叉树和红黑树这两种数据结构。其中红黑树又是一种特殊的排序二叉树。

排序二叉树是一种特殊结构的二叉树,可以非常方便地对树中所有节点进行排序和检索。

排序二叉树要么是一棵空二叉树,要么是具有下列性质的二叉树:

若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值;

若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值;

它的左、右子树也分别为排序二叉树。

图 1 显示了一棵排序二叉树:

图 1. 排序二叉树
通过分析 JDK 源代码研究 TreeMap 红黑树算法实现

上一页  1 2 3 4 5 6 7 8  下一页

Tags:通过 分析 JDK

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接