`
gk23
  • 浏览: 171465 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

StringBuffer傻瓜实验

 
阅读更多

今天测试了一下毕设,有些方法执行很慢。找了很长时间,不知道有什么调试的好办法,很快能定位哪个函数执行慢的方法?只是通过System.currentTimeMillis()一步一步逼近,哎!

 

终于找到了,String s=s+"XXX"的问题(以前别人写的代码)。

 

做了个小实验:

  StringBuffer sb = new StringBuffer();
  int i=0;


  long b=System.currentTimeMillis();
  while(i++<10000000)
   sb.append('a').append("bcd").append('e');
  long e=System.currentTimeMillis();
  System.out.println(e-b);
  
  i=0;
  sb = new StringBuffer();
  b=System.currentTimeMillis();
  while(i++<10000000)
   sb.append('a'+"bcd"+'e');
  e=System.currentTimeMillis();
  System.out.println(e-b);

结果为:2437ms和1453ms

 

  StringBuffer sb = new StringBuffer();
  int i=0;
  long b=System.currentTimeMillis();
  while(i++<5000000)
   sb.append('a').append("bcd").append(i).append('e');
  long e=System.currentTimeMillis();
  System.out.println(e-b);
  
  i=0;
  sb = new StringBuffer();
  b=System.currentTimeMillis();
  while(i++<5000000)
   sb.append('a'+"bcd"+i+'e');
  e=System.currentTimeMillis();
  System.out.println(e-b);

结果:2031ms和3047ms

总结:

在大循环中,

1、对于连接的字符串都为常量,直接用 sb.append('a'+"bcd"+'e');尽量减少append的次数。

2、对于连接的字符串大部分不同时,用 sb.append('a').append(i).append('e'); 比较快。

3、至于str+="aaa"或str=str+"aaa",大循环中直接死掉。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics