通过值添加到列表而不是Java中的引用

时间:2016-11-17 13:35:44

标签: java list pass-by-reference pass-by-value

我有一个地图列表,在for-loop中我想将一个Map添加到列表中。我听说使用map.clear()比创建一个新Map有更好的性能,但我的问题是List.add()与对象的引用一起工作,并且使用Map.clear()时引用不会消失。 / p>

是否有可能强制List.add()使用该值或构建其他解决方法?

2 个答案:

答案 0 :(得分:3)

可以通过简单地创建Map的副本并插入副本来插入“按值”。问题在于它根本不是优化。

您可以创建已填充Map的副本并清除原始Map,而不是仅创建新的空Map。这意味着:您不会避免创建新对象的开销,还会引入复制和清除已填充Map的额外工作。

关于优化的一点注意事项:
大约10%的代码会完成90%的工作(是的,这些数字是由这些数字组成的,但这是考虑优化和至少接近现实的常用方法)。不要在第一次运行时过度优化代码。只需轻松完成可以轻松完成的任务,而不会使代码的可读性降低,运行分析器并查找代码的瓶颈并优化代码。这比优化整个代码更有效,更容易。

答案 1 :(得分:1)

如果你不断重复使用相同的地图,那么清除它而不是抛弃旧地图来构建一个新地图是有意义的。

但是在这里,您不希望重复使用相同的Map,因为您希望将其存储在List中。如果要清除它以便重复使用它,则必须将Map的副本添加到列表中才能拥有独立的地图。哪一个具有更好的性能是低级优化。你永远不应该担心它,除非:

  • 你发现你有不可接受的表现
  • 你通过剖析发现,大部分时间都花在那里

您应该使用与项目编码规则更清晰/一致的内容。我会在每次迭代中创建一个全新的地图,但这只是我的观点。但请不要在早期开发阶段进行低级优化。