zoukankan      html  css  js  c++  java
  • Java8性能优化之字符串拼接

    字符串拼接常用到的几种方式如下:

      1、“+”拼接;

      2、concat拼接;

      3、StringBuilder(StringBuff)拼接。

    几种拼接方式的比较测试如下:

    代码:

         //字符串拼接测试
            String appendedStr = "a";
            String appendStr = "b";
    
            System.out.println("测试代码循环10000次。。。,结果如下:");
            long length = 10000;
    
            //➕号拼接
            long begin = System.currentTimeMillis();
            for (int i = 0; i < length; i++) {
                appendedStr += appendStr;
            }
            long end = System.currentTimeMillis();
            System.out.println("➕号拼接字符串用时:"+(end - begin));
    
            //concat拼接
            begin = System.currentTimeMillis();
            for (int i = 0; i < length; i++) {
                appendedStr.concat(appendStr);
            }
            end = System.currentTimeMillis();
            System.out.println("concat拼接字符串用时:"+(end - begin));
    
            //stringbuilder拼接
            begin = System.currentTimeMillis();
            StringBuilder stringBuilder = new StringBuilder(appendedStr);
            for (int i = 0; i < length; i++) {
                stringBuilder.append(appendStr);
            }
            stringBuilder.toString();
            end = System.currentTimeMillis();
            System.out.println("StringBuilder拼接字符串用时:"+(end - begin));

    测试结果如下:

    其中第一种方式拼接字符串在我的视眼中是最常见的,孰不知第一种方式是最不值得提倡的(性能消耗大,效率低),concat是由String类提供的封装类性能较“+”好很多,相较于前两者StringBuilder的速度基本可以忽略,快太多了。

    以上没有测试StringBuff主要是因为StringBuff和StringBuilder的实现实现原理和操作基本上一致,主要差别是StringBuff是由synchronized修饰,支持并发操作线程安全的类。而StringBuilder是不支持并发操作的,所以多线程时建议使用StringBuff。单线程中StringBuilder的性能要好于StringBuff。

    StringBuilder 和 StringBuff在单线程下的比较测试如下:

    由以上测试结果可以看出,在百万级别以下这两种方式是难分伯仲的,但是上升的千万级别的时候差别就很明显了。

    代码优化(性能提升)任重道远,希望大牛能给予建议。

    初心回归,时光已逝!
  • 相关阅读:
    HDU 1010 Tempter of the Bone(DFS剪枝)
    HDU 1013 Digital Roots(九余数定理)
    HDU 2680 Choose the best route(反向建图最短路)
    HDU 1596 find the safest road(最短路)
    HDU 2072 单词数
    HDU 3790 最短路径问题 (dijkstra)
    HDU 1018 Big Number
    HDU 1042 N!
    NYOJ 117 求逆序数 (树状数组)
    20.QT文本文件读写
  • 原文地址:https://www.cnblogs.com/yin1361866686/p/10343879.html
Copyright © 2011-2022 走看看