Java 字符串连接的性能问题分析
程序员文章站
2024-03-03 18:28:28
java中使用+作为字符串连接符,它是把多个字符串合并成一个字符串的方便途径。对于单独一行的输出、或者较小的大小固定对象,使用连接符方便且合适。但是对于大规模的场景,字符串...
java中使用+作为字符串连接符,它是把多个字符串合并成一个字符串的方便途径。对于单独一行的输出、或者较小的大小固定对象,使用连接符方便且合适。但是对于大规模的场景,字符串连接符变得有些不合时宜。
以连接n个字符串为列,重复的使用字符串连接符需要n的平方的时间量,最主要的原因是string类是不可变类导致的,即当连接两个字符串时,它们的内容都要存在一次拷贝。每一次连接,原有的两个字符串对象都不变,连接后的结果是一个新生成的对象。这种方式,不仅时间需求很大,而且对内存的要求也非常高。
如果拼接的字符串很多,使用字符串连接符的计算时间和对性能的消耗变得难以估算。为了使性能在接受范围内,可以使用stringbuilder替代string,来连接字符串。
以下是两种方式的测试代码:
<span style="font-size:18px;">public static void main(string[] args) { long start1 = system.currenttimemillis(); string result1 =""; for(int i = 0 ; i < 50000;i++){ result1 += string.valueof(i); } long end1 = system.currenttimemillis(); system.out.println("string connect time:"+(end1-start1)+"ms"); long start2 = system.currenttimemillis(); stringbuilder result2 = new stringbuilder(); for(int i = 0 ; i < 50000;i++){ result2.append(i); } long end2 = system.currenttimemillis(); system.out.println("stringbulider connect time:"+(end2-start2)+"ms"); }</span>
这两中做法的差距非常大,我所做的测试中,第二种做法要比第一种做法高4到5个数量级。随着连接数目的增多,两种方式的性能差距也更加明显。
总结一下:不要使用字符串连接符来连接多个字符串,除非系统对性能无要求。还有一点是,可以使用字符数组,或者每次只处理一个字符串,而不是将他们组合起来。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
下一篇: Python有序字典简单实现方法示例