概述
平时会用StringBuilder做字符串的频繁拼接,有些时候,在循环中拼接完字符串后需要将StringBuilder清空,然后从循环开始再次拼接。这里介绍一下StringBuilder的清空方法,及其性能比较。
注意:
我发现网上很多关于清空方法和效率比较的问题,都是复制一篇文章。
链接:Java中StringBuilder的清空方法比较
然后得出下面的效率上 2优于3优于1。
但是我发现这篇文章写的测试代码是存在明显问题的。就是文章中代码拼接字符串的长度数不同,最后进行了toString。
3数据的字符串长度明显长于2,所以toString会花费更多时间,最后进行比较时候得出了2优于3的结论。
下面我们对他的代码进行优化,
1.排除toString干扰。
2.且用相同长度的字符串去做测试。
3.循环100次取平均数据。
一、清空方法
1、新生成一个,旧的由系统自己主动回收
2、使用delete方法
3、使用setLength方法
二、代码示例
//StringBuilder性能测试
public class StringBuilderPerformanceTest {
static long time;
public static void main(String[] args) {
StringBuilder deleteMethod = new StringBuilder();
StringBuilder setLengthMethod = new StringBuilder();
Long sumWayFirst = Long.valueOf(0);
Long sumWaySecond = Long.valueOf(0);
Long sumWayThird = Long.valueOf(0);
for (int j = 0; j <= 100; j++) {
//新生成一个,旧的由系统自己主动回收
time = System.currentTimeMillis();
for (int i = 0; i < 10000000; i++) {
StringBuilder automaticRecovery = new StringBuilder();
automaticRecovery.append("someStr6ing");
automaticRecovery.append("someS5ring2");
automaticRecovery.append("some3Stin4g");
automaticRecovery.append("so3meSt5ing");
automaticRecovery.append("so2mSt7ring");
}
sumWayFirst += (System.currentTimeMillis() - time);
//使用delete方法
time = System.currentTimeMillis();
for (int i = 0; i < 10000000; i++) {
deleteMethod.delete(0, deleteMethod.length());
deleteMethod.append("someStr1ing");
deleteMethod.append("someString2");
deleteMethod.append("someStrin4g");
deleteMethod.append("someStr5ing");
deleteMethod.append("someSt7ring");
}
sumWaySecond += (System.currentTimeMillis() - time);
//使用setLength方法
time = System.currentTimeMillis();
for (int i = 0; i < 10000000; i++) {
setLengthMethod.setLength(0);
setLengthMethod.append("someStr55in");
setLengthMethod.append("some44Strin");
setLengthMethod.append("som55eStrin");
setLengthMethod.append("some66Str5i");
setLengthMethod.append("so33meSt7ri");
}
sumWayThird += (System.currentTimeMillis() - time);
}
System.out.println("way1:" + sumWayFirst.doubleValue() / 100);
System.out.println("way2:" + sumWaySecond.doubleValue() / 100);
System.out.println("way3:" + sumWayThird.doubleValue() / 100);
}
}
运行结果:
way1:478.1
way2:275.8
way3:259.44
三、最终结论
通过上述代码测试,可以看出
方法3最优
方法2其次
方法1最差
上面只是做个简单测试,还有很多不足之处,欢迎指出。
最后
以上就是风中钢笔为你收集整理的StringBuilder的清空方法及其效率比较的全部内容,希望文章能够帮你解决StringBuilder的清空方法及其效率比较所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复