第51条:当心字符串连接的性能

字符串连接操作符(“+”)是把多个字符串合并为一个字符串的便利途径。要想产生单独一行的输出,或者构造一个字符串来表示一个较小的、大小固定的对象,使用连接操作符是合适的。但对于为连接n个字符串而重复地使用字符串连接操作符,需要n的平方级的时间,这是由于字符串不可变,当两个字符串被连接在一起,它们的内容都要被拷贝。

public String statement() {
    String result = "";
    for(int i=0; i < numItems(); i++)
           result += lineForItem(i);
    return result;
}

如果numItems的数量很多,执行的时间会很长,为了获得可接受的性能,使用StringBuilder代替String

public String statement() {
    StringBuilder b = new StringBuilder(numItems() * LINE_WIDTH);
    for(int i=0; i < numItems(); i++)
        b.append(lineForItem(i));
    return b.toString();
}

StringBuilder内部维护一个字符数组,操作都是在字符数组上进行,append方法的时间是线性的。

时间: 2024-10-20 16:36:14

第51条:当心字符串连接的性能的相关文章

第五十一条:当心字符串的连接性能

字符串连接操作符(+)是把多个字符串合并为一个字符串的便利途径. 但是为了连接n个字符串而反复的使用字符串连接操作符,这对性能的影响是十分大的.因为String类是不可变的类, 两个字符串使用+来连接在一起时,它们的内容都要被拷贝. 为了获得可以接受的性能,请使用StringBuilder来代替String .(Java 1.5中新增了StringBuilder来代替过时的StringBuffer类). StringBuilder类提供了append方法.

JS中三种字符串连接方式及其性能比较

工作中经常会碰到要把2个或多个字符串连接成一个字符串的问题,在JS中处理这类问题一般有三种方法,这里将它们一一列出顺便也对它们的性能做个具体的比较. 第一种方法  用连接符“+”把要连接的字符串连起来: str="a"; str+="b"; 毫无疑问,这种方法是最便捷快速的,如果只连接100个以下的字符串建议用这种方法最方便. 第二种方法  以数组作为中介用 join 连接字符串: var arr=new Array(); arr.push(a); arr.push

Go 字符串连接+=与strings.Join性能对比

Go字符串连接 对于字符串的连接大致有两种方式: 1.通过+号连接 func StrPlus1(a []string) string { var s, sep string for i := 0; i < len(a); i++ { s += sep + a[i] sep = " " } return s } 2.通过strings.Join连接 func StrPlus2(a []string) string { return strings.Join(a, " &q

优化java字符串连接与循环

最近在看公司项目的时候,发现前辈们写的代码很少用到字符串通过"+"号拼接,通过看源码发现package java.lang下有StringBuilder这么个类 StringBuilder用起来相当的方便,特别是在拼接SQL的时候看的一目了然. 网上也有说:消除字符串连接,在程序中优先考虑使用StringBuffer或者StringBuilder代替String.一个字符串相当于一个匿名的String对象,如果在程序中拼接两个字符串那么会在内存中定义三个字符串空间.而StringBuf

python字符串连接超过2个,用join代替+号

python字符串连接效率问题 在python效率的讨论问题中字符串的连接效率有提过,多数建议使用join来代替"+"进行字符串连接 python中一切皆对象 字符串对象就是c api中得stringobject.c看python源码的objects文件可以找到 1."+".使用加号连接2个字符串会调用静态函数string_concat(register PyStringObject *a ,register PyObject * b),在这个函数中会开辟一块大小是

雅虎十四条 - 14个优化网站性能提高网站访问速度的技巧

14个优化网站性能提高网站访问速度的技巧 又叫“雅虎十四条”,想起一年前那个懵懂的我,大四傻乎乎的跑到大学城面试前端,那个时候以为寒暑假看了两套CSS的视频,就很牛B了,出发先还把视频温了一下,嗯嗯,这是滑动门,嗯嗯这是绝对定位,嗯嗯这是浮动清除…… 当时是彪叔面试我的,当时我还不知道那个人,全身黑漆漆的,黑色T-shirt,黑色皮肤,黑色帽子,黑色墨镜,还有点黑色胡渣的人,就是彪叔,补做了试题后支支吾吾的跟他谈了一下,发现完全不行,第一个问题是“雅虎十四条”是什么?然后我蒙了,pardon?

字符串拼接与性能分析

原文出处:http://www.venishjoe.net/2009/11/java-string-concatenation-and.html转自:http://coolshell.cn/articles/2235.html 概述:本文主要研究的是JAVA的字符串拼接的性能,原文中的测试代码在功能上并不等价,导致concat的测试意义不大.不过原作者在评论栏给了新的concat结果,如果有兴趣的同学建议自己修改代码测试. 在JAVA中拼接两个字符串的最简便的方式就是使用操作符”+”了.如果你用

几种常见的字符串连接方法连接速度分析

在平时的开发中难免会遇到字符串拼接的情况.比较常用的方法有:StringBuilder,+运算符,string.Format和string.Concat. 在.NET程序员中一直流传着一个传说:StringBuilder的性能可以吊打+运算符.不知道大家有没有亲自测试过这个传说,反正我以前没有没测试过. 通过查看源代码可以发现string.Format是通过调用StringBuilder中的方法来实现字符串拼接的.而且相对来说string.Format对字符串的格式很友好.所以在平时的开发中我最

Java字符串拆分和字符串连接

Java里面似乎没有对字符串进行拆分和连接的函数,我自己写了个 1 public class LierString{ 2 //------------------------------------------------------------------------ 3 //接受一个含有空格的字符串,返回一个字符串数组 4 public static String[] toSArr(String arg){ 5 //System.out.println("进入函数StrToASrr"