了解节点列表

时间:2012-10-24 18:26:27

标签: java nodes

我在尝试理解基本节点列表的代码时遇到问题。节点(类ListNode)包含三个变量;字符串“键”,值“值”,然后是另一个节点“下一个”。到现在为止还挺好。但是,在具有恰当名称ListMap的类中,我们有put()方法,我很难理解:

public void put(String key, int value) {
    ListNode l = search(key, head);
    if ( l==null ) {
        head = new ListNode(key, value, head);
    } else {
        l.value = value;
    }

protected static ListNode search(String key, ListNode l) {
    if (l==null) {
        return null;
    } else if (key.equals(l.key)) {
        return l;
    } else {
        return search(key, l.next);
    }
}

该方法搜索字符串“key”,如果列表中有一个,则将其值替换为第二个参数给出的新值。
我无法理解的是这个变量l,它被分配了与第一个参数共享相同“key”或String的节点。
当l.value设置为value时,为什么这会影响列表?
变量l不仅仅是列表中某个节点的副本,而不是实际节点的副本吗? 我提前为这样一个令人困惑的问题道歉,但我希望你们中的一个能够理解它。

1 个答案:

答案 0 :(得分:0)

  

变量l不是列表中某个节点的副本,而不是实际节点的副本吗?

不,它是对节点的引用(如C语言中的指针)。您可以对同一个对象进行多次引用,并且当通过不同的引用访问同一对象时,通过一个引用对该对象所做的更改当然是可见的。它就像别名。

这是一个简化的例子:

class ListNode {
    int value;
}

ListNode first = new ListNode();
ListNode second = first;
first.value = 42;
System.out.println(second.value);  //42