`

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

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



代码如下:

1.import java.util.ArrayList;
2.import java.util.List;
3.
4.import org.apache.commons.lang.StringUtils;
5.import org.junit.Test;
6.import org.slf4j.Logger;
7.import org.slf4j.LoggerFactory;
8.
9.public class TestString {
10.
11.    private final Logger logger = LoggerFactory.getLogger(this.getClass());
12.
13.    @Test
14.    public void testPlus() {
15.        String s = "";
16.        long ts = System.currentTimeMillis();
17.        for (int i = 0; i < 10000; i++) {
18.            s = s + String.valueOf(i);
19.        }
20.        long te = System.currentTimeMillis();
21.        logger.info("+ cost {} ms", te - ts);
22.    }
23.
24.    @Test
25.    public void testConcat() {
26.        String s = "";
27.        long ts = System.currentTimeMillis();
28.        for (int i = 0; i < 10000; i++) {
29.            s = s.concat(String.valueOf(i));
30.        }
31.        long te = System.currentTimeMillis();
32.        logger.info("concat cost {} ms", te - ts);
33.    }
34.
35.    @Test
36.    public void testJoin() {
37.        List<String> list = new ArrayList<String>();
38.        long ts = System.currentTimeMillis();
39.        for (int i = 0; i < 10000; i++) {
40.            list.add(String.valueOf(i));
41.        }
42.        StringUtils.join(list, "");
43.        long te = System.currentTimeMillis();
44.        logger.info("StringUtils.join cost {} ms", te - ts);
45.    }
46.
47.    @Test
48.    public void testStringBuffer() {
49.        StringBuffer sb = new StringBuffer();
50.        long ts = System.currentTimeMillis();
51.        for (int i = 0; i < 10000; i++) {
52.            sb.append(String.valueOf(i));
53.        }
54.        sb.toString();
55.        long te = System.currentTimeMillis();
56.        logger.info("StringBuffer cost {} ms", te - ts);
57.    }
58.
59.    @Test
60.    public void testStringBuilder() {
61.        StringBuilder sb = new StringBuilder();
62.        long ts = System.currentTimeMillis();
63.        for (int i = 0; i < 100000; i++) {
64.            sb.append(String.valueOf(i));
65.        }
66.        sb.toString();
67.        long te = System.currentTimeMillis();
68.        logger.info("StringBuilder cost {} ms", te - ts);
69.    }
70.}
71.


运行结果如下:

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支持。


原文:http://blog.csdn.net/kimsoft/article/details/3353849
分享到:
评论

相关推荐

    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