平时会用StringBuilder做字符串的频繁拼接,有些时候,在循环中拼接完字符串后需要将StringBuilder清空,然后从循环开始再次拼接。这里介绍一下StringBuilder的清空方法,及其性能比较。

注意: 

我发现网上很多关于清空方法和效率比较的问题,都是复制一篇文章。

链接:Java中StringBuilder的清空方法比较

然后得出下面的效率上 2优于3优于1。

但是我发现这篇文章写的测试代码是存在明显问题的。就是文章中代码拼接字符串的长度数不同,最后进行了toString。

3数据的字符串长度明显长于2,所以toString会花费更多时间,最后进行比较时候得出了2优于3的结论。

下面我们对他的代码进行优化,

1.排除toString干扰。

2.且用相同长度的字符串去做测试。

3.循环100次取平均数据。

一、清空方法

1、新生成一个,旧的由系统自己主动回收

2、使用delete方法

3、使用setLength方法

二、代码示例

//StringBuilder性能测试
public class StringBuilderPerformanceTest {static long time;public static void main(String[] args) {StringBuilder deleteMethod = new StringBuilder();StringBuilder setLengthMethod = new StringBuilder();Long sumWayFirst = Long.valueOf(0);Long sumWaySecond = Long.valueOf(0);Long sumWayThird = Long.valueOf(0);for (int j = 0; j <= 100; j++) {//新生成一个,旧的由系统自己主动回收time = System.currentTimeMillis();for (int i = 0; i < 10000000; i++) {StringBuilder automaticRecovery = new StringBuilder();automaticRecovery.append("someStr6ing");automaticRecovery.append("someS5ring2");automaticRecovery.append("some3Stin4g");automaticRecovery.append("so3meSt5ing");automaticRecovery.append("so2mSt7ring");}sumWayFirst += (System.currentTimeMillis() - time);//使用delete方法time = System.currentTimeMillis();for (int i = 0; i < 10000000; i++) {deleteMethod.delete(0, deleteMethod.length());deleteMethod.append("someStr1ing");deleteMethod.append("someString2");deleteMethod.append("someStrin4g");deleteMethod.append("someStr5ing");deleteMethod.append("someSt7ring");}sumWaySecond += (System.currentTimeMillis() - time);//使用setLength方法time = System.currentTimeMillis();for (int i = 0; i < 10000000; i++) {setLengthMethod.setLength(0);setLengthMethod.append("someStr55in");setLengthMethod.append("some44Strin");setLengthMethod.append("som55eStrin");setLengthMethod.append("some66Str5i");setLengthMethod.append("so33meSt7ri");}sumWayThird += (System.currentTimeMillis() - time);}System.out.println("way1:" + sumWayFirst.doubleValue() / 100);System.out.println("way2:" + sumWaySecond.doubleValue() / 100);System.out.println("way3:" + sumWayThird.doubleValue() / 100);}
}

运行结果:

way1:478.1
way2:275.8
way3:259.44

三、最终结论

通过上述代码测试,可以看出

方法3最优

方法2其次

方法1最差

上面只是做个简单测试,还有很多不足之处,欢迎指出。

StringBuilder的清空方法及其效率比较相关推荐

  1. Java中StringBuilder的清空方法比較

    StringBuilder 没有提供clear或empty方法. 清空有3种方法: 1)新生成一个,旧的由系统自己主动回收 2)使用delete 3)使用setLength 将三种方法循环1000万次 ...

  2. java stringbuilder清空_Java中StringBuilder的清空方法比较

    StringBuilder 没有提供clear或empty方法. 清空有3种方法: 1)新生成一个,旧的由系统自动回收 2)使用delete 3)使用setLength 将三种方法循环1000万次,代 ...

  3. java stringbuilder清空_Java中StringBuilder的清空方法比較

    StringBuilder 没有提供clear或empty方法. 清空有3种方法: 1)新生成一个,旧的由系统自己主动回收 2)使用delete 3)使用setLength 将三种方法循环1000万次 ...

  4. 清空StringBuilder的三种方法及效率

    清空StringBuilder的三种方法及效率 大家知道对于字符串频繁拼接是使用stringbuilder.Append方法比使用string+=方法效率高很多,但有时需要清空stringbuilde ...

  5. StringBuilder的四种清空方式及其效率比较

    在平时的开发中,StringBuilder用的还是比较常见的,主要是用于优化String字符串的拼接操作.这里介绍一下StringBuilder常见的清空方式: 使用new关键字重新生成一个Strin ...

  6. 关于StringBuilder 的清空问题

    StringBuilder 的三种清空方式: 直接在循环中new StringBuilder ():每次都重新new出来 使用delete(0,length()):清除没一个元素 使用setLengt ...

  7. StringBuilder的append方法原理

    关于字符串拼接,我们一般使用+号对String类进行拼接,但实际上这是一种非常不高效的方法,而另一种方法就是使用StringBuilder类的append方法,这是一种非常高效的方式. 今天也是被面试 ...

  8. php遍历数组哪个效率高,PHP遍历数组的三种方法及效率对比分析

    PHP遍历数组的三种方法及效率对比分析 发布于 2015-03-04 21:55:27 | 129 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext ...

  9. C++和Java的属性访问和方法调用 效率比较

    属性访问----C++快于Java JVM访问对象属性时(字节码OP_IGET_/OP_SGET_),会先通过属性名字字符串去查ClassObject元数据中属性的偏移(通过属性名字符串找到Class ...

最新文章

  1. 微信防撤回python_python使用wxpy实现微信消息防撤回脚本
  2. opencv安装与python cv2安装
  3. php内容缓存输出,PHP使用缓存即时输出内容(output buffering)的方法
  4. thymeleaf获取url地址跳转时所带参数
  5. 浅谈Android进阶之路
  6. GIT每次上传代码都必须输入用户名解决方案
  7. pycharm项目目录结构_VOCs吸附回收装置和焚烧装置列入新版产业结构调整指导目录鼓励类项目...
  8. OBS视频录制及其直播推流教程(超详细,非硬核)
  9. mac 终极教程,最全,最实用的教程
  10. 3月24日服务器维护公告,梦幻西游3月24日更新了什么_梦幻西游3月24日维护及系统调整公告_游戏堡...
  11. 北大MBA夫妇不满现有教育系统 携女隐居终南山
  12. [Noi2010]航空管制
  13. 陶哲轩实分析 5.5 节习题试解
  14. 如何用Mindmanager画思维导图
  15. 数据结构—C语言:校园导航系统(最短路径两种算法:深度搜素以及Dijkstra)
  16. [oeasy]python0088_字节_Byte_存储单位_KB_MB_GB_TB
  17. Gitlab上传代码时报错文件太大无法上传
  18. MDN Web Docs
  19. 最新整理:传智播客springboot
  20. 美国主机BlueHost vs HostEase

热门文章

  1. 蓝桥杯STM32G431学习记录4——LCD的使用
  2. 芝士亲子早教助力孩子成长
  3. 安全管家安卓_Get起这些新技能,让你的安卓手机使用起来更流畅
  4. 什么?Twitter CEO的推特账号也遭黑客攻击了?
  5. securecrt全屏怎么退回_SecureCRT工具快捷键
  6. Node.js 入门手册:那些最流行的 Web 开发框架
  7. create connection SQLException, url: jdbc:mysql://127.0.0.1:3306/xxxx, errorCode 0, state 08001
  8. Springbot启动报错-类文件具有错误的版本 61.0, 应为 52.0
  9. android 分辨率 尺寸,Android 屏幕分辨率与尺寸
  10. native2ascii.exe 用法