java 清空StringBuilder、StringBuffer的三种方式及速度比较
情景展示
在实际开发过程中,我们通常使用StringBuilder或StringBuffer来完成字符串的拼接工作,有时需要进行数据清空操作。
清空StringBuilder或StringBuffer有哪些方式能够实现?哪种方式最快?
StringBuilder sb = new StringBuilder(); sb.append("君不见黄河之水天上来");
方式一:调用setLength()
sb.setLength(0);
方式二:调用delete() 推荐使用
sb.delete(0,sb.length());
方式三:创建新对象
创建新对象,旧对象由java垃圾回收机制自动处理
sb = new StringBuilder();
速度对比
测试1:
// 循环次数:一千万次 final int loopTimes = 10000000; StringBuilder sb = new StringBuilder(); long begin = System.currentTimeMillis(); // 第3种方式 for (int i = 0; i < loopTimes; i++) { // 清空 sb = new StringBuilder(); // append的字符串要都不相同,杜绝java字符串常量池的影响 sb.append(UniqueUtils.generateGuid());// 唯一值 } System.out.println("new对象所耗时间:" + (System.currentTimeMillis() - begin)); begin = System.currentTimeMillis(); // 第2种方式 for (int i = 0; i < loopTimes; i++) { // 清空 sb.delete(0, sb.length()); sb.append(UniqueUtils.generateGuid());// 唯一值 } System.out.println("delete所耗时间:" + (System.currentTimeMillis() - begin)); begin = System.currentTimeMillis(); // 第1种方式 for (int i = 0; i < loopTimes; i++) { // 清空 sb.setLength(0); sb.append(UniqueUtils.generateGuid());// 唯一值 } System.out.println("setLength所耗时间:" + (System.currentTimeMillis() - begin));
测试2:
为了进一步验证delete和setLength哪个更快,我二者的执行先后顺序进行了调换
// 循环次数:一千万次 final int loopTimes = 10000000; StringBuilder sb = new StringBuilder(); log.debug("方式三开始运行。。。"); long begin = System.currentTimeMillis(); // 第3种方式 for (int i = 0; i < loopTimes; i++) { // 清空 sb = new StringBuilder(); // append的字符串要都不相同,杜绝java字符串常量池的影响 sb.append(UniqueUtils.generateGuid());// 唯一值 } System.out.println("new对象所耗时间:" + (System.currentTimeMillis() - begin)); log.debug("方式一开始运行。。。"); begin = System.currentTimeMillis(); // 第1种方式 for (int i = 0; i < loopTimes; i++) { // 清空 sb.setLength(0); sb.append(UniqueUtils.generateGuid());// 唯一值 } System.out.println("setLength所耗时间:" + (System.currentTimeMillis() - begin)); log.debug("方式二开始运行。。。"); begin = System.currentTimeMillis(); // 第2种方式 for (int i = 0; i < loopTimes; i++) { // 清空 sb.delete(0, sb.length()); sb.append(UniqueUtils.generateGuid());// 唯一值 } System.out.println("delete所耗时间:" + (System.currentTimeMillis() - begin));
实验结果证明:
delete也就是方式二的执行速度更快。
StringBuffer与StringBuilder清空的方法一致,也是delete的效率更高
本文来自博客园,作者:Marydon,转载请注明原文链接:https://www.cnblogs.com/Marydon20170307/p/14764920.html