将字符串性能提升到极致: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替代字符串”+”会带来性能提升吗

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

字符串连接:使用StringBuffer#append来替代”+”真的会带来性能提升吗?

华为软件经营挑战赛的 append 想到的一些,跟大家分享一下

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

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

【转载】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的区别以及性能差异

JAVA平台提供它们可以储存和操作字符串 String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) 总的测试结...

8.2-全栈Java笔记:字符串相关类(String/StringBuilder /StringBuffer)

字符串相关类(String/StringBuilder /StringBuffer) String类 String 类对象代表不可变的Unicode字符序列。 什么叫做“不可变的对象”...

java字符串(1):String,StringBuffer,StringBuilder的使用与区别

前言java中最常用的类之一就是String类,java程序中的所有字符串字面值(如“abc”)都作为此类的实例实现。更多描述请查阅API文档综述。本文介绍String类的使用和一些注意事项,以及与S...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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