/ *来自Java TreeMap实现中的CLR * /

时间:2016-07-20 13:30:58

标签: java clr

我正在寻找Java(JDK 1.6_45)TreeMap代码,以了解我遇到的问题,并且在几个方法中我看到了一条评论/ **来自CLR * /。

我的印象是CLR是其常用运行时的Microsoft术语。 CLR术语是否也用于Java?如果没有,那么是否存在使用彼此实现的共同协议(在转换过程之后)或者它只是一些自动生成的注释?

实施例

/** From CLR */
    private void fixAfterInsertion(Entry<K,V> x) {

2 个答案:

答案 0 :(得分:2)

看起来Java的[[a,b,c,d,e],[a,b,c,d,e],[a,b,c,d,e]...]“借用了JabberNet's Tree的部分实现,它是用C#编写的 - here the full C# source code

Java TreeMap的作者之一很可能包含了反映这一事实的评论(因此评论中的“CLR”确实意味着“公共语言运行时”)。

这是一个代码段from Java's TreeMap

TreeMap

这里是相应的代码段from the JabberNet C# code

/** From CLR */
private void fixAfterDeletion(Entry<K,V> x) {
    while (x != root && colorOf(x) == BLACK) {
        if (x == leftOf(parentOf(x))) {
            Entry<K,V> sib = rightOf(parentOf(x));

            if (colorOf(sib) == RED) {
                setColor(sib, BLACK);
                setColor(parentOf(x), RED);
                rotateLeft(parentOf(x));
                sib = rightOf(parentOf(x));
            }

            if (colorOf(leftOf(sib))  == BLACK &&
                colorOf(rightOf(sib)) == BLACK) {
            ...

正如您所看到的,代码几乎相同 - 除了缩进,节点类名和语法差异。

对于标记为private void fixAfterDeletion(Node x) { while ((x != root) && (colorOf(x) == NodeColor.BLACK)) { if (x == leftOf(parentOf(x))) { Node sib = rightOf(parentOf(x)); if (colorOf(sib) == NodeColor.RED) { setColor(sib, NodeColor.BLACK); setColor(parentOf(x), NodeColor.RED); rotateLeft(parentOf(x)); sib = rightOf(parentOf(x)); } if ((colorOf(leftOf(sib)) == NodeColor.BLACK) && (colorOf(rightOf(sib)) == NodeColor.BLACK)) ... 的其他方法也是如此。

但是,Java代码 not 似乎是从C#代码完全自动生成的,参见this comment in the Java code

/** From CLR */

答案 1 :(得分:2)

“CLR”是三个人的缩写,即Cormen,Leiserson和Rivest,第一版 Introduction to Algorithms 的作者。

EmirCalabuch在another thread中回答

  

RBT的TreeMap实现没有什么特别之处。它严格遵循CLRS(Cormen,Leiserson,Rivest和Stein)一书中给出的伪代码,这是99%的实现。

“CLRS”指的是与“CLR”相同的书。由于此类方法紧跟 Introduction to Algorithms ,因此使用/** From CLR */进行评论是合理的。