我是靠谱客的博主 风中钢笔,这篇文章主要介绍StringBuilder的清空方法及其效率比较,现在分享给大家,希望可以做个参考。

平时会用StringBuilder做字符串的频繁拼接,有些时候,在循环中拼接完字符串后需要将StringBuilder清空,然后从循环开始再次拼接。这里介绍一下StringBuilder的清空方法,及其性能比较。

注意: 

我发现网上很多关于清空方法和效率比较的问题,都是复制一篇文章。

链接:Java中StringBuilder的清空方法比较

然后得出下面的效率上 2优于3优于1。

但是我发现这篇文章写的测试代码是存在明显问题的。就是文章中代码拼接字符串的长度数不同,最后进行了toString。

3数据的字符串长度明显长于2,所以toString会花费更多时间,最后进行比较时候得出了2优于3的结论。

下面我们对他的代码进行优化,

1.排除toString干扰。

2.且用相同长度的字符串去做测试。

3.循环100次取平均数据。

一、清空方法 

1、新生成一个,旧的由系统自己主动回收

2、使用delete方法

3、使用setLength方法

二、代码示例

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
//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); } }

运行结果:

复制代码
1
2
3
way1:478.1 way2:275.8 way3:259.44

三、最终结论

通过上述代码测试,可以看出

方法3最优

方法2其次

方法1最差

上面只是做个简单测试,还有很多不足之处,欢迎指出。

 

最后

以上就是风中钢笔最近收集整理的关于StringBuilder的清空方法及其效率比较的全部内容,更多相关StringBuilder内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(80)

评论列表共有 0 条评论

立即
投稿
返回
顶部