`
唯快不破
  • 浏览: 83028 次
  • 性别: Icon_minigender_1
  • 来自: 南宁
社区版块
存档分类
最新评论

Java 5种字符串拼接方式性能比较。

    博客分类:
  • java
阅读更多
最近写一个东东,可能会考虑到字符串拼接,想了几种方法,但对性能未知,于是用Junit写了个单元测试。

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

import org.apache.commons.lang.StringUtils; 
import org.junit.Test; 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

public class TestString { 

    private final Logger logger = LoggerFactory.getLogger(this.getClass()); 

    @Test 
    public void testPlus() { 
        String s = ""; 
        long ts = System.currentTimeMillis(); 
        for (int i = 0; i < 10000; i++) { 
            s = s + String.valueOf(i); 
        } 
        long te = System.currentTimeMillis(); 
        logger.info("+ cost {} ms", te - ts); 
    } 

    @Test 
    public void testConcat() { 
        String s = ""; 
        long ts = System.currentTimeMillis(); 
        for (int i = 0; i < 10000; i++) { 
            s = s.concat(String.valueOf(i)); 
        } 
        long te = System.currentTimeMillis(); 
        logger.info("concat cost {} ms", te - ts); 
    } 

    @Test 
    public void testJoin() { 
        List<String> list = new ArrayList<String>(); 
        long ts = System.currentTimeMillis(); 
        for (int i = 0; i < 10000; i++) { 
            list.add(String.valueOf(i)); 
        } 
        StringUtils.join(list, ""); 
        long te = System.currentTimeMillis(); 
        logger.info("StringUtils.join cost {} ms", te - ts); 
    } 

    @Test 
    public void testStringBuffer() { 
        StringBuffer sb = new StringBuffer(); 
        long ts = System.currentTimeMillis(); 
        for (int i = 0; i < 10000; i++) { 
            sb.append(String.valueOf(i)); 
        } 
        sb.toString(); 
        long te = System.currentTimeMillis(); 
        logger.info("StringBuffer cost {} ms", te - ts); 
    } 

    @Test 
    public void testStringBuilder() { 
        StringBuilder sb = new StringBuilder(); 
        long ts = System.currentTimeMillis(); 
        for (int i = 0; i < 100000; i++) { 
            sb.append(String.valueOf(i)); 
        } 
        sb.toString(); 
        long te = System.currentTimeMillis(); 
        logger.info("StringBuilder cost {} ms", te - ts); 
    } 
} 



运行结果如下:

11:00:22,359  INFO TestString:23 - + cost 1828 ms
11:00:22,921  INFO TestString:34 - concat cost 562 ms
11:00:22,937  INFO TestString:46 - StringUtils.join cost 16 ms
11:00:22,968  INFO TestString:58 - StringBuffer cost 31 ms
11:00:23,031  INFO TestString:70 - StringBuilder cost 63 ms

要特别注意的是:

StringBuilder 循环的次数是其它的10倍,如果是一样,那么返回 0,可见StringBuilder 的速度之快。


总结:

用+的方式效率最差,concat由于是内部机制实现,比+的方式好了不少。

Join 和 StringBuffer,相差不大,Join方式要快些,可见这种JavaScript中快速拼接字符串的方式在Java中也非常适用。

StringBuilder 的速度最快,但其有线程安全的问题,而且只有JDK5支持。
分享到:
评论

相关推荐

    JAVA的字符串拼接与性能

    JAVA的字符串拼接与性能 概述:本文主要研究的是JAVA的字符串拼接的性能,原文中的测试代码在功能上并不等价,导致concat的测试意义不大。不过原作者在评论栏给了新的concat结果,如果有兴趣的同学建议自己修改代码...

    JAVA的字符串拼接[参照].pdf

    本文主要探讨了在Java中几种不同的字符串拼接方法的性能差异,包括使用操作符`+`、`String.concat()`、`StringBuffer.append()`和`StringBuilder.append()`。以下是对这些方法的详细分析: 1. **字符串拼接操作符 ...

    SQL2JAVA-java字段串代码拼接小工具

    在Java中,有多种方式可以实现字符串拼接,比如使用`+`操作符,但当拼接的字符串数量较多时,这种方式的效率较低。因此,更推荐使用`StringBuffer`或`StringBuilder`类,它们提供了一种可扩展且高效的字符串操作方法...

    Java字符串拼接效率测试过程解析

    Java字符串拼接的方式有多种,包括使用String、StringBuffer和StringBuilder等。每种方式都有其优缺,选择哪种方式取决于具体的应用场景。 使用String进行字符串拼接是最简单的一种方式,但是在大量字符串拼接时,...

    将excal批量数据插入到postgresql数据库(目前实现字符串拼接的方式)

    在本教程中,我们将聚焦于如何将Excel数据批量导入到PostgreSQL数据库,特别关注一种常见的方法——通过字符串拼接的方式。PostgreSQL是一个功能强大的开源关系型数据库管理系统,而Excel则是广泛使用的电子表格工具...

    java实验-字符串.docx

    而StringBuffer类是可变的,可以使用`append()`方法添加内容,而不必每次都创建新对象,因此在处理大量字符串拼接时,StringBuffer的效率更高。 总结来说,这个实验旨在帮助我们理解和掌握Java中字符串的基本操作,...

    java字符串拼接与性能分析详解

    总之,理解和掌握Java字符串拼接的性能差异是优化代码的关键。正确选择拼接方法可以帮助我们编写出运行更快、资源消耗更低的程序。在实际开发中,应根据具体情况选择最适合的字符串处理策略,以提高程序的效率和响应...

    JAVA 字符串 操作

    - `StringBuilder`和`StringBuffer`类:用于大量字符串拼接,线程安全,性能优于`+`。 5. 查找与替换: - `indexOf()`:查找子字符串首次出现的位置。 - `lastIndexOf()`:查找子字符串最后一次出现的位置。 - ...

    +作为java中的拼接字符串的功能

    该程序通过比较使用"+"和`StringBuffer`进行字符串拼接所需的时间,可以看出后者在性能上明显优于前者。 #### 总结 综上所述,虽然"+"运算符用于字符串拼接非常方便,但在涉及大量拼接操作时应考虑使用`...

    java中的字符串处理

    5. **字符串转换**:Java提供了一种简便的方式将其他数据类型转换为字符串形式,这通常是通过调用`toString()`方法实现的,例如: ```java int i = 42; String s5 = i.toString(); // 将整数转换为字符串 ``` 6...

    StringBuilder字符串拼接工具

    总的来说,`StringBuilder`是Java中处理字符串拼接的关键工具,尤其在需要高效构建长字符串的场景下。它提供了灵活的方法来添加内容,且避免了不必要的内存开销。通过使用`StringBuilder`,开发者可以编写出更高效、...

    java中拼接字符串的5种方法效率对比

    今天,我们将通过测试和分析,比较 Java 中 5 种不同的字符串拼接方法的效率,并探究每种方法背后的实现原理。 第一种方法:使用 + 运算符 在 Java 中,我们可以使用 + 运算符来拼接字符串。这是最简单的方法,但其...

    ibatis拼接字符串

    在本篇文章中,我们将深入探讨如何使用 Java 编程语言结合 iBatis 框架进行 SQL 字符串的动态拼接。通过分析提供的代码片段,我们可以了解到在实际开发过程中,这种动态 SQL 的构建方式非常常见,尤其是在处理复杂的...

    Java 实例 - 字符串性能比较测试源代码-详细教程.zip

    相比传统的字符串拼接方式,`StringJoiner`在某些场景下能提供更好的性能和可读性。 最后,我们会探讨Java 8引入的流(Stream)API在处理字符串时的应用。利用流可以实现简洁且高效的字符串处理,例如使用`Collectors...

    Java 字符串连接的性能问题分析

    "Java 字符串连接的性能问题分析" Java 字符串连接的性能问题分析是 Java 开发中一个常见的问题,特别是在大规模的场景中。 Java 中使用 + 作为字符串连接符是把多个字符串合并成一个字符串的方便途径,但是在大...

    Java 字符串的拼接详解

    下面我们将深入探讨Java字符串拼接的原理、性能影响以及编译器的优化策略。 首先,当我们用`+`运算符或`StringBuilder`/`StringBuffer`进行字符串拼接时,由于String的不可变性,每次拼接都会创建新的字符串对象。...

    JAVA 数组与字符串课程文档

    在处理字符串时,可以使用`StringBuffer`或`StringBuilder`类进行高效的字符串拼接操作,尤其在循环中,这两个类比直接使用`+`操作符更有效率。 数组和字符串在实际编程中常常结合使用,比如在一个字符串数组中存储...

    Java 8中字符串拼接新姿势StringJoiner详解

    Java 8中字符串拼接新姿势StringJoiner详解 Java 8中引入了一个新的字符串拼接...StringJoiner是Java 8中一个新的字符串拼接方式,提供了一个简单和高效的方式来实现字符串拼接,并且可以满足不同的字符串拼接需求。

Global site tag (gtag.js) - Google Analytics