读书人

TreeeMap的底层兑现

发布时间: 2012-08-31 12:55:03 作者: rapoo

TreeeMap的底层实现
treeMap插入元素的图解法:
插入前:




插入过程:
1



2



3





4





5




6




代码分析(转)

private void deleteEntry(Entry<K,V> p)  {     modCount++;     size--;     // 如果被删除节点的左子树、右子树都不为空    if (p.left != null && p.right != null)     {         // 用 p 节点的中序后继节点代替 p 节点        Entry<K,V> s = successor (p);         p.key = s.key;         p.value = s.value;         p = s;     }     // 如果 p 节点的左节点存在,replacement 代表左节点;否则代表右节点。    Entry<K,V> replacement = (p.left != null ? p.left : p.right);     if (replacement != null)     {         replacement.parent = p.parent;         // 如果 p 没有父节点,则 replacemment 变成父节点        if (p.parent == null)             root = replacement;         // 如果 p 节点是其父节点的左子节点        else if (p == p.parent.left)             p.parent.left  = replacement;         // 如果 p 节点是其父节点的右子节点        else             p.parent.right = replacement;         p.left = p.right = p.parent = null;         // 修复红黑树        if (p.color == BLACK)             fixAfterDeletion(replacement);       // ①    }     // 如果 p 节点没有父节点    else if (p.parent == null)     {         root = null;     }     else     {         if (p.color == BLACK)             // 修复红黑树            fixAfterDeletion(p);                 // ②        if (p.parent != null)         {             // 如果 p 是其父节点的左子节点            if (p == p.parent.left)                 p.parent.left = null;             // 如果 p 是其父节点的右子节点            else if (p == p.parent.right)                 p.parent.right = null;             p.parent = null;         }     }  } 

读书人网 >编程

热点推荐