javascript - 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) 时间内工作?
解决方案
为了澄清,让我们分解字符串连接和 for 循环之间的运行时复杂性。Java 中的字符串连接是 O(n),因为 Java 创建了一个全新的字符串。既然你已经把它放在了一个 for 循环中,现在我们将另一个n相乘得到 O(n^2)。
字符串连接不是 O(n^2),for 循环内的连接是 O(n^2)。
在 JavaScript 中,字符串连接的工作方式不同,更复杂的是,其基础依赖于浏览器。这是 2010 年的一篇文章,解释了一些差异。许多浏览器也针对字符串操作进行了优化。查看有关字符串连接的相关问题。
推荐阅读
- javascript - TypeORM:如何使用 UUID 获取下一个项目?
- java - 无法从 Java WebSocket 向 JS 客户端发送消息
- python - 在 numpy 数组中的所有项目周围添加 0
- node.js - 电极点燃 - 生成应用程序 - 类型错误:无法读取未定义的属性“代理”
- java - 委托人获取用户ID
- python - 如何使用 Anaconda 在 Windows 上安装 ipopt for python
- visual-studio - 如何构建 SkiaSharp 项目?libSkiaSharp.dll 丢失了吗?
- .net - VB 用列表计算两个整数
- laravel - 如何避免vue中的反应性
- selenium-webdriver - Appium :: org.openqa.selenium.SessionNotCreatedException:无法创建新的远程会话