Java中String运算的成本是多少?

时间:2011-12-16 05:05:25

标签: java algorithm memory runtime addition

对于此for循环,是运行时间O(n)或O(n ^ 2):

char[] ar = new char[1000];
String s = "";
Arrays.fill(ar, 'a');
for(Character c: ar){
    s += c;
}

基本上,字符串上+的运行时间是多少?它如何在Java中的幕后工作?

2 个答案:

答案 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)。