arrList.toString()比for(int num:arrList)更有效地打印ArrayList吗? [重复]

问题描述 投票:-1回答:1

此问题已经在这里有了答案:

例如,您会说...

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

为什么?

我在我的项目中实现了代码的第一个示例,但是我的合作伙伴认为这不会比其实现(代码的第二个示例)更有效,所以我想征询您的意见。

谢谢。

java for-loop tostring
1个回答
0
投票

为了完整起见,这里是对性能的分析。不建议将此作为建议,因为我和deHaar已在注释中指出您不应该优化字符串操作并且只需使用String.join()以获得最佳代码可读性

您的第一种方法使用库代码来创建所有元素的串联,其中", "在中间,并用方括号分隔。该实现可能非常有效(稍微了解一下Java源代码),并分配单个StringBuilder,数组或任何大小合适的数组并将其填充。然后,您去除外部字符,从而创建第二个字符串。

您的第二种方法将每个数组元素(最后一个方法除外)串联在一起,这将创建一个默认大小的新StringBuilder,添加要串联的对象,并将其煮沸为String。还有更多的对象和字符串,因此从逻辑上讲必须更慢。

编辑:可能比以上所有方法都有更好的可读性的另一种方法(主观!):

arrList.stream().map(Number::toString).collect(Collectors.joining(", "))
© www.soinside.com 2019 - 2024. All rights reserved.