Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java指针传递映射混淆_Java_Pointers_Map - Fatal编程技术网

Java指针传递映射混淆

Java指针传递映射混淆,java,pointers,map,Java,Pointers,Map,我想知道这两种说法是否等价: Map<String, List<String>> nodeToLinkMap = new HashMap<String, List<String>>(); ... // (assuming the map has something in it for this key) List<String> links = nodeToLinkMap.get(node); links.add(link); nod

我想知道这两种说法是否等价:

Map<String, List<String>> nodeToLinkMap = new HashMap<String, List<String>>();
... 
// (assuming the map has something in it for this key)
List<String> links = nodeToLinkMap.get(node);
links.add(link);
nodeToLinkMap.put(node, links);

它是同一个指针还是复制的

它是同一个指针还是复制的

首先,Java中没有指针这样的东西。这叫做参考


第二个代码可以。但是如果你想对列表做太多的修改,这看起来可能不太令人愉快。

这两个语句将完成相同的任务

注意,当你打电话时

nodeToLinkMap.put(node, links);
在第一个代码段中,实际上是将节点映射到的值替换为节点本身

因此,您可以将第一部分缩短为

Map<String, List<String>> nodeToLinkMap = new HashMap<String, List<String>>();
... 
// (assuming the map has something in it for this key)
List<String> links = nodeToLinkMap.get(node);
links.add(link);

考虑使用,而不是滚动自己。java没有指针,它有引用,这些引用被复制,而不是它们引用的对象。Java中没有隐式复制构造函数。
nodeToLinkMap.put(node, links);  // Not needed.
nodeToLinkMap.put(node, links);
Map<String, List<String>> nodeToLinkMap = new HashMap<String, List<String>>();
... 
// (assuming the map has something in it for this key)
List<String> links = nodeToLinkMap.get(node);
links.add(link);