跟我学(Effective Java 2)第51条:当心字符串连接的性能

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

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

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

如果项目数量巨大,这个方法的执行时间就难以估算。为了获得可以接受的性能,请使用StringBuffer替代String,来存储建筑中的对账单。

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

使用StringBuffer替代String,时间复杂度n 。所以项目数越大,性能的差别会越显著。

原则很简单:不要使用字符串连接操作符来合并多个字符串,除非性能无关紧要。相反,应该使用StringBuffer的append方法。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值