2015070210 - EffactiveJava笔记 - 第51条 当心字符串连接性能

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

    20150702 星期四 北京

    字符串连接操作符(+),把多个字符串合并成一个字符串的便利方式.

    想要产生单独一行的输出,或者构造一个字符串表示较小的大小固定的对象,那么使用连接操作符非常合适.

    不适合运用在大规模场景,为连接n个字符串而重复使用字符串操作符,需要n的平方级的时间.因为字符串不可变导致,当两个字符串拼接在一起,它们的内容都要拷贝.

    案例:反复拼接账单行,构造出代表该账单的字符串.

    <script src="https://code.csdn.net/snippets/730335.js"></script>

    如果账单条数巨大,此方法执行时间不可估量.

    为获取可接受的性能,使用StringBuilder代替String.

    <script src="https://code.csdn.net/snippets/730337.js"></script>

    (以后需要经常使用StringBuilder代替String)

   上面两者性能差距非常大,如果numItems()返回100,lineForItem()返回固定长度80个字符的字符串,作者机器上第二种比第一种快85倍.

   第一种做法的开销随项目数量呈现平方级别增加;

   第二种做法则是线性增加,所以项目越大,性能越明显.

   第二种做法预先分配StringBuilder,让它足以容纳结果字符串.

    结论:不要使用字符串连接操作符进行拼接多个字符串,除非性能无关紧要,要使用StringBuilder的append()方法;或者使用字符串组,或者每次只处理一个字符串,而不是将它们组合起来.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值