我是靠谱客的博主 风中钢笔,最近开发中收集的这篇文章主要介绍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方法

二、代码示例

//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的清空方法及其效率比较所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部