首页 > 解决方案 > JavaScript 字符串连接效率

问题描述

我正在做一个练习题,涉及在 for 循环中连接字符串。我在这个网站上看到了一些关于旧相关问题的信息,但我想知道其他一些细节。我从(Cracking the Coding Interview)中得到练习题的书用 Java 给出了解决方案。这是代码的简化版本,只是为了说明这一点:

for(int i = 0; i < str.length; i++){
   string += str.charAt(i) + i;
}

这本书指出了这很慢,因为 Java 中的字符串连接在 O(n^2) 中运行。解决这个问题的方法是在 java 中使用 StringBuilder 类。

但是,这将如何在 Javascript 中工作?使用“+=”的字符串连接是否也可以在 O(n^2) 时间内工作?

标签: javascriptarraysstringperformance

解决方案


为了澄清,让我们分解字符串连接和 for 循环之间的运行时复杂性。Java 中的字符串连接是 O(n),因为 Java 创建了一个全新的字符串。既然你已经把它放在了一个 for 循环中,现在我们将另一个n相乘得到 O(n^2)。

字符串连接不是 O(n^2),for 循环内的连接是 O(n^2)。

在 JavaScript 中,字符串连接的工作方式不同,更复杂的是,其基础依赖于浏览器。这是 2010 年的一篇文章,解释了一些差异。许多浏览器也针对字符串操作进行了优化。查看有关字符串连接的相关问题。


推荐阅读