java - 对节点列表的理解

标签 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,它被分配给与第一个参数共享相同“键”或字符串的节点。
当l.value设置为value时,为什么会影响列表?
变量 l 不是只是列表中节点之一的副本,而不是实际节点吗?
对于这样一个令人困惑的问题,我提前表示歉意,但我希望你们中的一个人能够理解它。

最佳答案

Isn't the variable l just a copy of one of the nodes in the list, not not the actual node?

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

这是一个简化的示例:

class ListNode {
    int value;
}

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

关于java - 对节点列表的理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13055401/

相关文章:

xml - XPath 按节点、子节点和子子节点条件选择节点

c - 列表不断打印

java - 阿拉伯语和英语混合导致 JTextArea (Java) 出现问题

java - 不一致的 "possible lossy conversion from int to byte"编译时错误

java - 从其他一些 Arraylist 的元素填充 Arraylist。

java - 在 Java 中将 SHGetFileInfo 与 JNA 结合使用

java - 测量通过套接字发送的数据大小

javascript - 试图在 JavaScript 中获取节点的值,但它一直说它是 "null"

c - 在二叉搜索树中的 C 处插入新节点

c++ - 二叉树中的递归搜索