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的效率更高

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

 相关推荐:

 

posted @ 2021-05-13 16:05  Marydon  阅读(2664)  评论(0编辑  收藏  举报