0

我想知道这两个语句是否等效:

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

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

它是同一个指针还是复制了一份?

4

2 回答 2

4

这两个语句将完成同样的事情。

请注意,当您调用

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);
于 2013-07-01T22:27:11.377 回答
3

它是同一个指针还是复制了一份?

首先,Java中没有指针之类的东西。它被称为参考

List<String> links = nodeToLinkMap.get(node);

在上面的代码中,您只是创建了一个对存储在地图中的列表的新引用。它不会创建列表本身的副本。因此,无论您在此列表中添加或删除的内容都会反映在存储在地图中的列表中。您无需将列表放回地图中。

因此,您可以从第一个代码中删除此行:

nodeToLinkMap.put(node, links);  // Not needed.

第二个代码很好。但是,如果您要在列表中进行太多修改,它可能看起来并不愉快。

于 2013-07-01T22:24:09.400 回答