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

    写在最后

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

     相关推荐:

  • 相关阅读:
    JavaScript语言基础
    IP地址分类及CIDR划分方法
    Python静态方法实现单实例模式
    【转载】http和socket之长连接和短连接
    DDoS攻击
    Vue自定义过滤器
    解决跨域问题
    微信菜单创建
    canvas标签(1)--线条、矩形、圆形、文本、阴影、抛小球
    Bootstrap CSS概览代码文字标注篇
  • 原文地址:https://www.cnblogs.com/Marydon20170307/p/14764920.html
Copyright © 2011-2022 走看看