将字符串性能提升到极致:StringBuilder和StringBuffer

原创 2015年07月07日 17:44:42

对于字符串操作,类似于“+”和“+=”的运算符应该尽量少用。其次,String的concat()方法效率远远高于“+”和“+=”运算符,但是又远远低于StringBuilder类。


Note: 在无需考虑线程安全的情况下,使用性能相对较好的StringBuilder,但是若系统有线程安全要求,只能选择StringBuffer。String尽量不用!


public class BuilderorBuffer {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		noCapacity();
		hasCapacity();
	}
	
	public static void noCapacity(){
		StringBuilder sbuilder = new StringBuilder();
		
		long start = System.currentTimeMillis();
		for(int i=0;i<5000000;i++){
			sbuilder.append(i);
		}
		System.out.println("noCapacity,StringBuilder elapsed:" + (System.currentTimeMillis() - start));
		
		
		
		StringBuffer sbuffer = new StringBuffer();
		
		long start2 = System.currentTimeMillis();
		for(int i=0;i<5000000;i++){
			sbuffer.append(i);
		}
		System.out.println("noCapacity,StringBuffer elapsed:" + (System.currentTimeMillis() - start2));
	}
	
	public static void hasCapacity(){
		StringBuilder sbuilder = new StringBuilder(50000000);
		
		long start = System.currentTimeMillis();
		for(int i=0;i<5000000;i++){
			sbuilder.append(i);
		}
		System.out.println("hasCapacity,StringBuilder elapsed:" + (System.currentTimeMillis() - start));
		
		
		
		StringBuffer sbuffer = new StringBuffer(50000000);
		
		long start2 = System.currentTimeMillis();
		for(int i=0;i<5000000;i++){
			sbuffer.append(i);
		}
		System.out.println("hasCapacity,StringBuffer elapsed:" + (System.currentTimeMillis() - start2));
	}

}

分别对StringBuilder和StringBuffer,在不指定容量和指定容量两个情况下,append五十万的结果(单位ms)

noCapacity,StringBuilder elapsed:600
noCapacity,StringBuffer elapsed:1395
hasCapacity,StringBuilder elapsed:275
hasCapacity,StringBuffer elapsed:708

ps.原以为在大数据时代,机器学习算法需要参数调优,原来在这里就已经出现参数调优了。















用StringBuilder(StringBuffer)#append替代字符串”+”会带来性能提升吗

转自:http://www.ticmy.com/?p=69 经常看到一些论坛在谈java代码优化的时候讲到要将字符串连接操作”+”换成StringBuilder(或StringBuffer,...

用StringBuilder(StringBuffer)#append替代字符串”+”会带来性能提升吗

经常看到一些论坛在谈java代码优化的时候讲到要将字符串连接操作”+”换成StringBuilder(或StringBuffer,后面为简单起见,只说StringBuilder)的append操作以提...

什么情况下用+运算符进行字符串连接比调用StringBuffer/StringBuilder对象的append方法连接字符串性能更好?

tring一旦赋值或实例化后就不可更改,如果赋予新值将会重新开辟内存地址进行存储。 而StringBuffer类使用append和insert等方法改变字符串值时只是在原有对象存储的内存地址...

什么情况下用+运算符进行字符串连接比调用StringBuffer/StringBuilder对象的append方法连接字符串性能更好?

如果在编写代码的过程中大量使用+进行字符串评价还是会对性能造成比较大的影响,但是使用的个数在1000以下还是可以接受的,大于10000的话,执行时间将可能超过1s,会对性能产生较大影响。如果有大量需要...

【转载】StringBuilder性能真的优于StringBuffer?!!!!

大家都知道,StringBuilder和StringBuffer主要区别是前者不是线程安全的,后者是线程安全的,余JDK预留的对外接口几乎是一模一样的,所以在确定线程安全的环境的前提下,优先使用Sri...

String,StringBuffer,StringBuilder三者性能

String性能最差,final对象,不能改变,做字符拼接是得重新new一个对象,然后作拼接 StringBuffer 在对象内部操作,里面的方法绝大数是同步方法,在内部用 char[]数组进行操作...

String/StringBuilder/StringBuffer性能对比

String String s="a"; s=s+1;虚拟机解析这段代码时,创建对象s,赋予一个a,当执行到第二句的时候,先创建一个左边的s对象,此时的s并不等于之前创建的s,然后给新的s赋值s+1...

关于String和StringBuilder、StringBuffer的一个简单性能测试

String a=String b + String c + String d 这种代码在程序里应该随处可见,一部分人不知道这段代码的缺陷在哪,另一部分人知道这样写不好,但是太顺手了下意识就写了...

String,StringBuffer,StringBuilder性能比较,线程安全测试,源码解析。

第一个区别public class example1 { public static void main(String[] args) { // TODO Auto-genera...

String, StringBuffer 和Stringbuilder的区别以及性能差异

JAVA平台提供它们可以储存和操作字符串 String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) 总的测试结...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:将字符串性能提升到极致:StringBuilder和StringBuffer
举报原因:
原因补充:

(最多只允许输入30个字)