String, StringBuffer 和StringBuilder 执行时间上的比较

发布时间:2014-10-22 13:53:47编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"String, StringBuffer 和StringBuilder 执行时间上的比较",主要涉及到String, StringBuffer 和StringBuilder 执行时间上的比较方面的内容,对于String, StringBuffer 和StringBuilder 执行时间上的比较感兴趣的同学可以参考一下。

  当遇到连续的字符串操作时,String str=str+"i", StringBuffer str=StringBuffer.append(i) 和StringBuilder str=StringBuilder.append(i) 有什么区别呢?    思考两秒钟。。。   用程序验证一下吧。    代码:        package com.blueray.java.test; public class StringOperation { public long stringAdd(long times){ long startTime=System.currentTimeMillis(); String s=""; for(long i=0;i<times;i++){ s=s+i; } long endTime=System.currentTimeMillis(); long timeBuf= endTime-startTime; System.out.println(timeBuf+","); return timeBuf; } } 执行代码:      public class String_StringBuffer_Compare { public static long TIMES_FIFTY = 50L; public static long TIMES_ONE_HUNDROD = 100L; public static long TIMES_TWO_HUNDROD = 200L; public static long TIMES_FIVE_HUNDROD = 500L; public static long TIMES_ONE_THOUSAND = 1000L; public static long TIMES_FIVE_THOUSAND = 5000L; public static long TIMES_TEN_THOUSAND = 10000L; public static long TIMES_FIFTY_THOUSAND = 50000L; public static long TIMES_HUNDROD_THOUSAND = 100000L; public static long[] times = { TIMES_FIFTY, TIMES_ONE_HUNDROD, TIMES_TWO_HUNDROD, TIMES_FIVE_HUNDROD, TIMES_ONE_THOUSAND, TIMES_FIVE_THOUSAND,TIMES_TEN_THOUSAND,TIMES_FIFTY_THOUSAND,TIMES_HUNDROD_THOUSAND}; /** * @param args */ public static void main(String[] args) { // for (long time : times) { // StringOperation strOpt = new StringOperation(); // strOpt.stringAdd(time); // } // for (long time : times) { // StringBufferOperation strOpt = new StringBufferOperation(); // strOpt.stringAppend(time); // } for (long time : times) { StringBuilderOperation strOpt = new StringBuilderOperation(); strOpt.stringAppend(time); } } 执行4次,结果:    50 Times 100 Times 200 Times 500 Times 1000 Times 5000 Times 10000 Times 50000 Times 100000 Times 1 0 2 3 9 63 175 5170 24403 0 1 1 4 11 65 178 5232 24077 0 0 5 3 11 82 179 5266 24133 0 0 1 4 10 77 179 5367 24133 StringConcatOperation: package com.blueray.java.test; public class StringConcatOperation { public long stringConcat(long times){ long startTime=System.currentTimeMillis(); String s=""; for(long i=0;i<times;i++){ s=s.concat(String.valueOf(i)); } long endTime=System.currentTimeMillis(); long timeBuf= endTime-startTime; System.out.println(timeBuf+","); return timeBuf; } } 执行结果: 50 Times 100 Times 200 Times 500 Times 1000 Times 5000 Times 10000 Times 50000 Times 100000 Times 1 0 1 2 7 47 99 2699 12650 0 0 1 2 6 46 98 2679 12185 0 1 1 2 6 45 93 2666 12511 1 0 1 2 7 54 94 2669 12143 StringBufferOperation: package com.blueray.java.test; public class StringBufferOperation { public long stringAppend(long times){ long startTime=System.currentTimeMillis(); StringBuffer s=new StringBuffer(); for(long i=0;i<times;i++){ s.append(i); } long endTime=System.currentTimeMillis(); long timeBuf= endTime-startTime; System.out.println(timeBuf+","); return timeBuf; } }  结果:     50 Times 100 Times 200 Times 500 Times 1000 Times 5000 Times 10000 Times 50000 Times 100000 Times 0 0 0 1 1 11 12 12 8 0 0 0 1 1 11 23 15 9 0 0 0 0 1 13 24 15 10 0 0 0 0 1 17 12 11 11 StringBuilderOperation:     package com.blueray.java.test; public class StringBuilderOperation { public long stringAppend(long times){ long startTime=System.currentTimeMillis(); StringBuilder s=new StringBuilder(); for(long i=0;i<times;i++){ s.append(i); } long endTime=System.currentTimeMillis(); long timeBuf= endTime-startTime; System.out.println(timeBuf+","); return timeBuf; } }  结果: 50 Times 100 Times 200 Times 500 Times 1000 Times 5000 Times 10000 Times 50000 Times 100000 Times 0 0 0 0 1 12 18 9 8 0 0 0 1 1 10 19 11 13 0 0 1 0 1 9 13 7 8 0 0 0 0 1 12 27 9 9    分析:        1. 从图上可以看出,StringBuilder 和StringBuffer的执行效率,要比String 要好       2. StringBuffer 和StringBuilder,在执行次数从5000到10000时,执行时间都有大幅上升,StringBuilder的时间增加曲线会更陡峭,说明StringBuilder 比StringBuffer,在单线程环境下会更好一些。    结论:      在执行时间上,String比两个SB的效率要差。  在不考虑多线程环境下,使用StringBuilder效果会更好。      不足:          (1). String 的累加是String 对象类型,而StringBuffer 和StringBuilder则添加的是long 型,虽然不太了解StringBuffer.append添加string 和添加long 有什么区别,但是如果改成append(String),可能比较会更加公平          (2).没有比较String.concat.


上一篇:今天被一个做国内项目的同学活活的鄙视了。
下一篇:CentOS6.3挂载读写NTFS分区&nbsp;(…

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款