我正在寻找Java(JDK 1.6_45)TreeMap代码,以了解我遇到的问题,并且在几个方法中我看到了一条评论/ **来自CLR * /。
我的印象是CLR是其常用运行时的Microsoft术语。 CLR术语是否也用于Java?如果没有,那么是否存在使用彼此实现的共同协议(在转换过程之后)或者它只是一些自动生成的注释?
实施例
/** From CLR */
private void fixAfterInsertion(Entry<K,V> x) {
答案 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 */
进行评论是合理的。