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);