`

字符串拼接汇总(性能对比)

    博客分类:
  • java
阅读更多

在开发过程中,经常会和字符串打交道, 其中字符串拼接的工作必不可少,

最常用的有

  • +

  • string concat

  • String.join (since jdk8)

  • StringBuffer append

  • StringBuilder append

我们来看看性能情况

1. 实现

public class StringAppendTest extends AbstractPerformanceTest{

    private static final int LOOP_COUNT = 100_0000;

    //---------------------------------------------------------------

    @Override
    protected String[] buildFieldArray(){
        return toArray("+", "String concat", "String.join", "StringBuffer.append", "StringBuilder.append");
    }

    //---------------------------------------------------------------

    @Override
    protected ProcessCallback buildMutiCallback(){
        return new ProcessCallback(){

            @Override
            public void processResult(String field){
                switch (field) {
                    case "+":
                        String a = "a";
                        for (int i = 0; i < LOOP_COUNT; i++){
                            a += "b";
                        }
                        break;

                    case "String concat":
                        String c = "c";
                        for (int i = 0; i < LOOP_COUNT; i++){
                            c = c.concat("d");
                        }
                        break;

                    //since 20180207
                    case "String.join":
                        String j = "j";
                        for (int i = 0; i < LOOP_COUNT; i++){
                            j = String.join(j, "j");
                        }
                        break;

                    case "StringBuffer.append":
                        StringBuffer e = new StringBuffer("e");
                        for (int i = 0; i < LOOP_COUNT; i++){
                            e.append("d");
                        }
                        break;

                    case "StringBuilder.append":
                        StringBuilder d = new StringBuilder("e");
                        for (int i = 0; i < LOOP_COUNT; i++){
                            d.append("d");
                        }
                        break;

                    default:
                        break;
                }
            }
        };
    }

}

2. 性能对比

35917725 195c16ca 0c4a 11e8 813e c381330befa6

上图是 循环 100,0000 统计出来的数据

在性能上 ++ 是最差的

StringBuilder 最快

测试硬件概览:

型号名称:	MacBook Pro
处理器名称:	Intel Core i5
处理器速度:	2.9 GHz
内存:	16 GB
1
1
分享到:
评论
2 楼 飞天奔月 2018-02-07  
加上了 jdk8  String.join

性能不错
1 楼 fanlei77 2018-02-07  
JDK8的String.join可以加一下一起比较

相关推荐

    C#字符串总结

    在这个例子中,`StringBuilder`在循环内部进行字符串拼接,直到循环结束才一次性转换成`string`对象,大大提高了效率。 在处理字符串时,应根据具体需求选择合适的方式。如果字符串操作很少,且不涉及多次修改,...

    Golang字符串的拼接方法汇总

    下面我们将详细介绍几种Golang中实现字符串拼接的方法及其性能对比。 1. **直接使用运算符**: - Golang允许通过`+`运算符进行字符串拼接,如`"hello" + "," + "world"`。这种方法简单直观,但性能较差,因为每次...

    c++字符串处理汇总

    - `strcmp(str1, str2)`:比较两个字符串,返回值可判断字符串的相对顺序。 - `strstr(haystack, needle)`:在`haystack`中查找`needle`,返回`needle`首次出现的指针,找不到则返回`NULL`。 5. **C++标准库中的`...

    C#实现char字符数组与字符串相互转换的方法

    这三种方法都能将字符数组转换为字符串,但在性能上,第三种方法(使用构造函数)通常被认为是最快的,因为它不需要额外的字符串连接操作。 除了这些基本转换方法,了解其他相关的字符串和字符数组操作也很有用。...

    Java编程中常见问题汇总

    使用`StringBuffer`进行字符串拼接时,如果未正确初始化或使用不当,也会导致性能问题。 **错误示例:** ```java StringBuffer sb = new StringBuffer(); sb.append("Name:"); sb.append(name + '\n'); sb.append(...

    Java 汇总学习简介7

    - 能够灵活运用`String`和`StringBuffer`进行字符串操作,包括创建、比较、拼接、查找和修改等。 通过学习这个章节,开发者将具备处理Java字符串的基本能力,为后续深入学习Java集合框架、I/O流和其他高级概念打下...

    java面试笔试题大汇总.pdf

    - 当需要频繁地比较字符串或者用于键值对等场合时,使用`String`类更为合适。 - 由于其不可变性,`String`类在多线程环境中无需担心同步问题,适用于共享数据的场景。 ##### 1.2 StringBuffer类 - **定义**:`...

    JAVAEE常见面试汇总.docx

    - 字符串拼接同样是在原有基础上追加,性能高于StringBuffer。 - **性能比较** - 对于大数据量的字符串拼接,推荐使用`StringBuilder`(多线程场景下使用`StringBuffer`)。 - `StringBuilder`的执行效率高于`...

    Java编程:常见问题汇总

    1. **使用`StringBuilder`而非直接拼接:**`StringBuilder`可以高效地进行字符串拼接。 2. **预分配内存:**根据集合的大小预先分配足够的内存空间,避免了多次扩容带来的性能开销。 #### 错误的使用`StringBuffer`...

    java面试笔试题大汇总

    在处理大量字符串拼接时,使用StringBuffer比String更高效,因为String每次拼接都会创建新对象,而StringBuffer可以复用已有对象。 4. **String与StringBuffer的区别**: - String对象一旦创建就不可变,适合字符...

    工具类工具类

    2. 字符串操作:`StringUtils`,包含字符串的拼接、查找、替换、分割等方法。 3. 集合处理:`CollectionUtils`,提供集合的遍历、过滤、合并等操作。 4. 文件操作:`FileUtils`,处理文件的读写、复制、移动等任务...

    java技术问题,java+web+ssh

    - **StringBuffer**: 可变字符串,线程安全,适用于多线程环境下的字符串拼接操作。 - **StringBuilder**: 从JDK 5开始引入,非线程安全版本的StringBuffer,比StringBuffer速度快,在单线程环境下推荐使用。 **3. ...

    通过SQL语句实现行列转换的几种方法

    除此之外,还会涉及将多列或多行的数据合并为字符串,或将字符串拆分为多列或多行等操作。本文将重点探讨如何通过SQL语句实现这些转换,特别是将多行数据转换为单一字符串的情况。 #### 一、概述 行列转换可以分为...

    2015百度校招笔试题汇总

    需要实现一个简化版的string类,它应该具有构造函数、拷贝构造函数、析构函数、赋值运算符重载、比较运算符重载、字符串拼接以及获取字符串长度和子串的功能。这个题目考察候选人对C++类的理解和操作符重载的实现。 ...

    JAVA程序员笔试面试题汇总及答案

    - **StringBuffer**:可变字符串,可以在原有基础上进行修改,适合用于字符串拼接等操作。 - **String类的final修饰**:意味着该类不能被继承,确保了字符串的安全性和一致性。 #### 三、int与Integer的区别 1. ...

    Java面试笔试题大汇总

    `String`是不可变的,而`StringBuilder`和`StringBuffer`可变,适用于字符串拼接操作。 3. **int 和 Integer**: - `int`是原始类型,直接存储值,而`Integer`是其封装类,存储的是对象,提供了更多方法和功能,如...

    java笔试面试题大汇总

    `StringBuffer`是可变的,可以在线程安全的情况下高效地进行字符串拼接和修改,适合在多线程环境或频繁修改字符串时使用。 5. **运行时异常与一般异常**:运行时异常是程序运行中可能出现的错误,比如除零错误、空...

Global site tag (gtag.js) - Google Analytics