zoukankan      html  css  js  c++  java
  • StringBuilder的四种清空方式及其效率比较

    在平时的开发中,StringBuilder用的还是比较常见的,主要是用于优化String字符串的拼接操作。这里介绍一下StringBuilder常见的清空方式:

    1. 使用new关键字重新生成一个StringBuilder对象;
    2. 使用StringBuilder的delete方法;
    3. 使用StringBuilder的setLength方法;
    4. 使用StringBuilder的replace方法。

    接下来分别测试上述4个方法,查看一下效率:

    1. 测试new新建对象:

      

      @Test
        public void newTest() {
            int forCount = 100000000;
            StringBuilder sb = new StringBuilder();
            long startTime = System.currentTimeMillis();
            for (int i = 0; i < forCount; i++) {
                sb.append("1111");
                sb.append("2222");
                sb.append("3333");
                sb.append("4444");
                // 新建对象
                sb = new StringBuilder();
            }
            System.out.println("newTest()耗时:" + (System.currentTimeMillis() - startTime));
        }

    运行结果:

    newTest()耗时:2250
    
    1. 测试delete方法:
        @Test
        public void deleteTest() {
            int forCount = 100000000;
            StringBuilder sb = new StringBuilder();
            long startTime = System.currentTimeMillis();
            for (int i = 0; i < forCount; i++) {
                sb.append("1111");
                sb.append("2222");
                sb.append("3333");
                sb.append("4444");
                // 使用delete方法清空
                sb.delete(0, sb.length());
            }
            System.out.println("deleteTest()耗时:" + (System.currentTimeMillis() - startTime));
        }
    

    运行结果:

    deleteTest()耗时:1780
    
    1. 测试setLength方法:
        @Test
        public void setLengthTest() {
            int forCount = 100000000;
            StringBuilder sb = new StringBuilder();
            long startTime = System.currentTimeMillis();
            for (int i = 0; i < forCount; i++) {
                sb.append("1111");
                sb.append("2222");
                sb.append("3333");
                sb.append("4444");
                // 使用setLength方法清空
                sb.setLength(0);
            }
            System.out.println("setLengthTest()耗时:" + (System.currentTimeMillis() - startTime));
        }
    

    运行结果:

    setLengthTest()耗时:1751
    
    1. 测试replace方法:
    	@Test
        public void replaceTest() {
            int forCount = 100000000;
            StringBuilder sb = new StringBuilder();
            long startTime = System.currentTimeMillis();
            for (int i = 0; i < forCount; i++) {
                sb.append("1111");
                sb.append("2222");
                sb.append("3333");
                sb.append("4444");
                // 使用replace方法清空
                sb.replace(0, sb.length(), "");
            }
            System.out.println("replaceTest()耗时:" + (System.currentTimeMillis() - startTime));
        }
    

    运行结果:

    replaceTest()耗时:1776
    

    由结果可知,上述四种方法中,使用new关键字循环创建对象效率最低,其他三种方法耗时相近,可择优选择使用。

    一颗安安静静的小韭菜。文中如果有什么错误,欢迎指出。
  • 相关阅读:
    ZCMU训练赛-H(模拟)
    ZCMU训练赛-B(dp/暴力)
    ZCMU训练赛-A(模拟)
    HDU 2045 LELE的RPG难题(递推)
    HDU 2044 一只小蜜蜂(递归)
    HDU 2050 折线分割平面(转)
    对递归的理解归纳(转)
    漫谈递归思想(转)
    2017中南大学暑期集训day1 : debug&STL-A
    探寻宝藏--河南省第六届大学生程序设计竞赛
  • 原文地址:https://www.cnblogs.com/c-Ajing/p/13448327.html
Copyright © 2011-2022 走看看