拼接操作和append性能对比

一 代码

    /*
    体会执行效率:通过 StringBuilder 的 append() 的方式添加字符串的效率要远高于使用 String 的字符串拼接方式!
    ①  StringBuilder的append()的方式:自始至终中只创建过一个 StringBuilder 的对象。
       使用 String 的字符串拼接方式:创建过多个 StringBuilder 和 String 的对象
    ②  使用 String 的字符串拼接方式:内存中由于创建了较多的 StringBuilder 和 String 的对象,内存占用更大;如果进行GC,需要花费额外的时间。
    改进的空间:在实际开发中,如果基本确定要前前后后添加的字符串长度不高于某个限定值 highLevel 的情况下,建议使用构造器实例化:
       StringBuilder s = new StringBuilder(highLevel); // new char[highLevel]
     */
    @Test
    public void test6() {
        long start = System.currentTimeMillis();
        method1(100000); // 6159
        //method2(100000); // 4
        long end = System.currentTimeMillis();
        System.out.println("花费的时间为:" + (end - start));
    }
    // 使用 String 的 + 进行字符串拼接
    public void method1(int highLevel) {
        String src = "";
        for (int i = 0; i < highLevel; i++) {
            src = src + "a"; // 每次循环都会创建一个 StringBuilder、String
        }
//        System.out.println(src);


    }
    // 使用 StringBuilder 的 append 方法进行拼接
    public void method2(int highLevel) {
        // 只需要创建一个 StringBuilder
        StringBuilder src = new StringBuilder();
        for (int i = 0; i < highLevel; i++) {
            src.append("a");
        }
//        System.out.println(src);
    }

二 测试

method1 耗费的时间:6159 ms,method2 消耗时间:4ms

三 结论

通过 StringBuilder 的 append() 方式添加字符串的效率,要远远高于 String 的字符串拼接方法。

四 性能分析

  • StringBuilder 的 append 的方式,自始至终只创建一个 StringBuilder 的对象。不论从空间角度还是时间角度考虑,都是一个好的解决方案。

  • 对于字符串拼接(+)的方式,需要创建很多 StringBuilder 对象和调用 toString 时候创建的 String 对象。内存中由于创建了较多的 StringBuilder 和 String 对象,内存占用过大,如果进行 GC 那么将会耗费更多的时间。不论从空间角度还是时间角度考虑,String 都是一个糟糕的解决方案。

五 改进的空间

  • 如果使用的是 StringBuilder 的空参构造器,默认的字符串容量是16,然后将原来的字符串拷贝到新的字符串中, 我们也可以默认初始化更大的长度,减少扩容的次数。

  • 因此在实际开发中,我们能够确定,前前后后需要添加的字符串不高于某个限定值,那么建议使用构造器创建一个阈值的长度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值