【发布时间】:2020-10-09 19:29:03
【问题描述】:
假设我必须打印一个带有逗号分隔值的数组 arr。现在,我正在做以下事情:
for(int i = 0;i<arr.length;i++) {
System.out.print(arr[i] + ",");
}
但是,对于较大的 arr 长度,我想知道这是否真的很慢。我想到的第二种方法是使用 StringBuilder,构造最终的输出字符串,并且只使用 1 个打印语句。那值得去吗?权衡将是更复杂的代码。
如果重要的话,我想要一个打印到控制台和打印到文件的答案。
【问题讨论】:
-
System.out.print(String.join(", ", arr))?您是否确定这是需要优化的重要应用程序瓶颈? -
(1-) 但是,对于较大的 arr 长度,我想知道这是否真的很慢。 - 试试看。 我想到的第二种方法是使用 StringBuilder, - 现在需要权衡,因为在内存中有两个数据副本。如果您决定使用这种方法,请使用
StringJoiner。 -
除非您要打印数万行,否则我认为您不会注意到任何速度差异。除非您注意到速度问题,否则何必费心优化?
-
现在,您生成的 CSV 有点不正确:最后一个值后面有一个逗号。我的观点是:首先让您的代码正确且可读。然后运行它。当你说“哦,这太慢了”时,就要担心性能了。
-
是的:这不是最优的:打印到标准输出的成本大约为毫秒,而在内存中连接字符串运行得更快。因此,如果您有 100 万个值,打印一百万个字符串或打印一个非常大的字符串之间可能会有明显的差异。
标签: java stringbuilder outputstream