此问题已经在这里有了答案:
例如,您会说...
public void printList()
{
String arrStr = arrList.toString();
System.out.println(arrStr.substring(1, arrStr.length()-1));
}
比...效率更高或更低
public void printList()
{
boolean firstNum = true;
for(int num : arrList) {
if(firstNum == true) {
System.out.print(num);
firstNum = false;
}
else {
System.out.print("," + num);
}
}
}
为什么?
我在我的项目中实现了代码的第一个示例,但是我的合作伙伴认为这不会比其实现(代码的第二个示例)更有效,所以我想征询您的意见。
谢谢。
为了完整起见,这里是对性能的分析。不建议将此作为建议,因为我和deHaar已在注释中指出您不应该优化字符串操作并且只需使用。String.join()
以获得最佳代码可读性
您的第一种方法使用库代码来创建所有元素的串联,其中", "
在中间,并用方括号分隔。该实现可能非常有效(稍微了解一下Java源代码),并分配单个StringBuilder
,数组或任何大小合适的数组并将其填充。然后,您去除外部字符,从而创建第二个字符串。
您的第二种方法将每个数组元素(最后一个方法除外)串联在一起,这将创建一个默认大小的新StringBuilder
,添加要串联的对象,并将其煮沸为String
。还有更多的对象和字符串,因此从逻辑上讲必须更慢。
编辑:可能比以上所有方法都有更好的可读性的另一种方法(主观!):
arrList.stream().map(Number::toString).collect(Collectors.joining(", "))