在字符串不可变的所有语言中使用 += 进行字符串连接是否很慢?

问题描述 投票:0回答:1
string s = "";
int n = 10000;
for (int i = 0; i < n; i++) {
    s += "hello";
}

上面的代码在 C++ 中运行得非常快,但是同样的代码在 Java 中需要相对较长的时间,因为 Java 每次都必须创建一个新的字符串,这是因为字符串在 C++ 中是可变的,但在 Java 中是不可变的。至少这是我从LeetCode中了解到的。

我的问题是,这个问题是特定于 Java 的,还是在字符串不可变的所有语言中重复将字符串附加到字符串是一个缓慢的操作?

java c++ string concatenation time-complexity
1个回答
1
投票

是的。这是因为每个周期都需要在不同的位置分配内存来存储新字符串。内存搜索、旧字符串的垃圾回收以及语言的其他内部工作机制都会减慢这个过程。在 Java 中,您可以使用 StringBuilder 对象收集字符串并使用 append 方法连接字符串来加快速度。

© www.soinside.com 2019 - 2024. All rights reserved.