【发布时间】:2014-02-15 06:28:04
【问题描述】:
我正在浏览 JAVA 中的 TreeMap 的源代码。 根据 JAVA 文档:
基于红黑树的 NavigableMap 实现。地图根据其键的自然顺序或在地图创建时提供的 Comparator 进行排序,具体取决于使用的构造函数。
此实现为 containsKey、get、put 和 remove 操作提供有保证的 log(n) 时间成本。算法是对 Cormen、Leiserson 和 Rivest 的算法简介中的算法的改编。
在源代码中我发现一个内部类Entry被用作节点。
static final class Entry<K,V> implements Map.Entry<K,V> {
K key;
V value;
Entry<K,V> left = null;
Entry<K,V> right = null;
Entry<K,V> parent;
boolean color = BLACK;
....
关于红黑树的定义。从维基百科我发现:
红黑树是一种自平衡二叉搜索树,是计算机科学中使用的一种数据结构。
通过使用两种颜色(通常称为“红色”和“黑色”,因此树的名称)中的一种来绘制每个节点来提供自平衡,以使生成的绘制树满足某些属性不允许它变得明显不平衡。当树被修改时,新树随后被重新排列并重新绘制以恢复着色属性。这些属性的设计方式使得这种重新排列和重新着色可以有效地执行。
我试图分析源代码但无法理解以下内容:
-
假设我已经在树中有两个键“C”和“E”,然后我添加了“D”。节点将如何排列(使用自然排序)。
-
java源码中Tree的自平衡是如何实现的。
我尝试搜索TreeMap的详细实现,但找不到任何文章,例如我为HashMap找到的following article
从昨天开始我就挂在这棵树上:(有人可以帮我下来吗...
【问题讨论】:
-
你看过 JSE 源码吗?一切都清楚了。
标签: java treemap red-black-tree