对于此for循环,是运行时间O(n)或O(n ^ 2):
char[] ar = new char[1000];
String s = "";
Arrays.fill(ar, 'a');
for(Character c: ar){
s += c;
}
基本上,字符串上+的运行时间是多少?它如何在Java中的幕后工作?
答案 0 :(得分:5)
Java字符串是不可变的。每次你这样做:
S + = C;
你真的在说:
s = new String(s + c);
new String(s + c)必须分配长度为s + 1的字符串,或者:
1 2 3 4 五 6 7 8 9 ... 等
由于Sum(1..N)==(n + 1)(n / 2),这是O(n ^ 2)。
StringBuilder具有明显优势的一种情况。
答案 1 :(得分:3)
来自Josh Bloch的“Effective Java”;书中的第33项:
重复使用字符串连接运算符来连接n个字符串需要时间二次> in n ...当连接两个字符串时,两者的内容都被复制。
使用StringBuilder。我相信它的表现是O(n)。