Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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_List_Pass By Reference_Pass By Value - Fatal编程技术网

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

在Java中,通过值而不是引用添加到列表,java,list,pass-by-reference,pass-by-value,Java,List,Pass By Reference,Pass By Value,我有一个地图列表,在for循环中,我想向列表中添加一个地图。我听说使用map.clear()比创建一个新映射有更好的性能,但我的问题是List.add()与对象的引用一起工作,而通过使用map.clear()则引用不被删除 是否有可能强制List.add()使用该值或构建其他解决方法?只需创建地图的副本并插入副本,即可插入“按值”。问题是这根本不是一个优化 不只是创建一个新的空映射,而是创建一个已填充映射的副本,并清除原始映射。这意味着:您不仅避免了创建新对象的开销,而且还引入了复制和清除填充的

我有一个地图列表,在for循环中,我想向列表中添加一个地图。我听说使用map.clear()比创建一个新映射有更好的性能,但我的问题是List.add()与对象的引用一起工作,而通过使用map.clear()则引用不被删除

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

只需创建地图的副本并插入副本,即可插入“按值”。问题是这根本不是一个优化

不只是创建一个新的空
映射
,而是创建一个已填充
映射
的副本,并清除原始
映射
。这意味着:您不仅避免了创建新对象的开销,而且还引入了复制和清除填充的
映射的额外工作

还有一点关于一般优化的注意事项:
大约10%的代码将完成90%的工作(是的,这些数字是虚构的,但这是考虑优化的通常方式,至少接近现实)。不要在第一次运行时过度优化代码。只要做一些容易做的事情,并且不降低代码的可读性,就可以运行一个探查器,查找代码的瓶颈并对其进行优化。这比优化整个代码更有效、更简单。

只需创建
映射的副本并插入副本,就可以插入“按值”。问题是这根本不是一个优化

不只是创建一个新的空
映射
,而是创建一个已填充
映射
的副本,并清除原始
映射
。这意味着:您不仅避免了创建新对象的开销,而且还引入了复制和清除填充的
映射的额外工作

还有一点关于一般优化的注意事项:

大约10%的代码将完成90%的工作(是的,这些数字是虚构的,但这是考虑优化的通常方式,至少接近现实)。不要在第一次运行时过度优化代码。只要做一些容易做的事情,并且不降低代码的可读性,就可以运行一个探查器,查找代码的瓶颈并对其进行优化。这比优化整个代码更有效、更简单。

如果您不断重复使用同一个映射,那么清除它而不是扔掉旧映射来构建新映射是有意义的

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

  • 你发现自己的表现令人无法接受
  • 您通过分析发现,大部分时间都花在那里

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

如果您不断重复使用同一个映射,那么清除它而不是扔掉旧映射来构建新映射是有意义的

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

  • 你发现自己的表现令人无法接受
  • 您通过分析发现,大部分时间都花在那里

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

如果您在地图上调用
clear()
,它应该会清除一切。这是您想要的,还是您想要原始地图的副本?“我听说使用map.clear()比创建新地图有更好的性能”--这听起来像是一种微优化,除非有确凿的理由,否则你不应该担心。相关:@TimBiegeleisen我希望清除我创建的地图对象中的引用,但我希望保留列表中的引用。@bradimus在给定的情况下,我有一个最多可能包含100个对象的列表,但我想知道它供将来使用。因为我想我将来在处理更多数据时会遇到这个问题。如果在地图上调用
clear()
,它应该会清除所有内容。这是您想要的,还是您想要原始地图的副本?“我听说使用map.clear()比创建新地图有更好的性能”--这听起来像是一种微优化,除非有确凿的理由,否则你不应该担心。相关:@TimBiegeleisen我希望清除我创建的地图对象中的引用,但我希望保留列表中的引用。@bradimus在给定的情况下,我有一个最多可能包含100个对象的列表,但我想知道它供将来使用。因为我想我将来在处理更多数据时会遇到这个问题