您的位置:首页 > 其它

连接n个字符串而重复的使用+,需要n的平方级别的时间?为什么?

2013-11-05 22:33 344 查看
Efftive Java第51条: 当心字符串连接的性能,当连接n个字符串而重复地使用字符串连接操作,需要n的平方级的时间。

原因:字符串不可变,所以当两个字符串被连接在一起时,它们的内容都需要拷贝。

结论:当需要做多个字符串连接操作时,为了提高性能,应该使用StringBuilder的append方法,如果没有同步(单线程)问题也可以用StringBuffer类的append方法。

问题:为什么为连接n个字符串而重复的使用+,需要n的平方级别的时间?

证明:

第一次 a1+a2

拷贝次数 1 1

a1a2=a1+a2 共计1+1+1=3次

第二次 a1a2 + a3

拷贝次数 2 1

a1a2a3 = a1+a2+a3 共计 1+2+2*1+1=6次

第三次 a1a2a3 + a4

拷贝次数 3 1

a1a2a3 = a1+a2+a3 共计1+2+3+3*1+1=10次

依此类推

第n次 a1a2...a(n-1) + a(n)

拷贝次数 n-1 1

a1a2...a(n-1)a(n) 共计 1+2+3+(n-1)+1 = 1+2+3+(n-1)+n = n*(n+1)/2

以a1+a2+a3的连接为例,具体过程图解如下:



上面过程为我自己琢磨的,如果理解有错,望指证。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐