zoukankan      html  css  js  c++  java
  • 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的效率更高

    写在最后

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

     相关推荐:

  • 相关阅读:
    mac 界面以及界面浏览器等显示不全
    数组常用的方法总结
    工厂模式以及应用场景
    结构与布局-紧贴底部的页脚
    结构与布局-垂直居中
    vscode mac下终端code .快速打开工程文件
    javascript操作对象和集合(jquery 6)
    2018 Multi-University Training Contest 8
    2018 Multi-University Training Contest 8
    BZOJ 3196 二逼平衡树
  • 原文地址:https://www.cnblogs.com/Marydon20170307/p/14764920.html
Copyright © 2011-2022 走看看