美文网首页
拼接字符串+,StringBuilder,StringUtils

拼接字符串+,StringBuilder,StringUtils

作者: 暖熊熊 | 来源:发表于2019-02-27 14:29 被阅读0次

+拼接的时候底层会使用StringBuilder,如果是非循环体和使用StringBuilder相差无几,如果是循环体,就会在循环体内每次循环的时候new一个StringBuilder对象,创建很多次对象,造成运行效率下降。

5种方法用时比较:
StringBuilder<StringBuffer<concat<+<StringUtils.join
StringUtils.join效率应该没有很差,这里应该不准确
总结:
1、如果不是在循环体中进行字符串拼接的话,直接使用+就好了。
2、如果在并发场景中进行字符串拼接的话,要使用StringBuffer来代替StringBuilder
3、StringUtils.join用于将数组元素用某个字符串拼接起来
4、Java8新增了StringJoiner用于将list拼成字符串

StringJoiner例子,其中参数是分隔符

StringJoiner stringJoiner = new StringJoiner(";");
stringJoiner.add("a").add("b").add("c");
System.out.println(stringJoiner.toString());   //a,b,c

以下代码比较了将list转为‘,’拼接的字符串三种方法的效率

import org.apache.commons.lang3.StringUtils;
import org.springframework.util.StopWatch;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class GhwTest {

    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        //构造字符串list
        for (int i = 0; i < 100000; i++) {
            list.add(String.valueOf(i));
        }
        StopWatch stopWatch = new StopWatch();

        stopWatch.start("Commons的StringUtils");
        // 1.使用Apache Commons的StringUtils
        String str1 = StringUtils.join(list.toArray(), ",");
        // 2.通过遍历
        stopWatch.stop();

        stopWatch.start("迭代器拼接");
        StringBuilder str2 = new StringBuilder();
        for (Iterator<String> iterator = list.iterator(); iterator.hasNext(); ) {
            String string = iterator.next();
            str2.append(string);
            if (iterator.hasNext()) {
                str2.append(",");
            }
        }
        stopWatch.stop();

        String result = "";
        stopWatch.start("for循环拼接");
        for (String str : list) {
            result += "str" + ",";
        }
        if (result.endsWith(",")) {
            result = result.substring(0, result.length() - 1);
        }
        stopWatch.stop();
        System.out.println(stopWatch);
        //StopWatch '': running time (millis) = 13795; 
        [Commons的StringUtils] took 123 = 1%; 
        [迭代器拼接] took 0 = 0%; 
        [for循环拼接] took 13672 = 99%
    }
}

从运行结果可以看出for循环拼接的效率最低,建议使用StringUtils的join方法,
经过测试join方法有俩个,其中数组的效率比迭代器的高

相关文章

  • 拼接字符串+,StringBuilder,StringUtils

    +拼接的时候底层会使用StringBuilder,如果是非循环体和使用StringBuilder相差无几,如果是循...

  • 142字符串的高效处理

    1、字符串的拼接 2、StringBuilder类(字符串构建器) 使用StringBuilder来拼接字符串: ...

  • 字符串拼接详解

    1.使用 + 拼接字符串详解 2.使用StringBuilder拼接字符串详解 总结

  • 字符串拼接

    标签(空格分隔): java StringBuilder——字符串拼接多般是使用StringBuilder类,以及...

  • String

    String与StringBuilder的区别 什么是StringBuilder 可以完成字符串的拼接;需要引入S...

  • String 常用方法汇总

    截取字符串 字符串替换 字符串拼接 Stringbuilder 方法 StringJoiner 方法 setEmp...

  • 解决拼接字符串产生的滞留性-------StringBuilde

    学习StringBuilder:目的解决拼接字符串产生的滞留性。 string类有不可改变性,每次执行字符串拼接的...

  • Code Review

    1、字符串拼接问题一般带有复杂逻辑的字符串拼接,建议使用StringBuilder和StringBuffer,两者...

  • StringBuilder性能优化

    在String字符串拼接性能优化博客中我已经介绍过了String "+" 拼接背后的StringBuilder实现...

  • Android应用内存优化方式

    一、频繁字符串拼接用StringBuilder; 二、用ArrayMap、SparseArray代替HashMap...

网友评论

      本文标题:拼接字符串+,StringBuilder,StringUtils

      本文链接:https://www.haomeiwen.com/subject/ocdmdqtx.html