美文网首页
关于StringBuilder清空方式的比较

关于StringBuilder清空方式的比较

作者: 沐小木沐 | 来源:发表于2021-12-30 10:42 被阅读0次

    正好做个json字符串拼接的工具类,然后就突然想起了StringBuilder的数据清空问题。秉承着严谨的姿势(〃'▽'〃) ,那么做个测试类如下

    public class Test {
    
        private static String a;
        private static long time;
    
        public static void main(String[] args) {
            long c = 100000000L;
            doWay1(c);
            doWay2(c);
            doWay3(c);
        }
    
        private static void doWay1(long count) {
            StringBuilder sb = new StringBuilder();
            time = System.currentTimeMillis();
            for (long i = 0; i < count; i++) {
                sb.delete(0, sb.length());
                sb.append("someThi1ng");
                sb.append("someThi2ng");
                sb.append("someThi3ng");
                sb.append("someThi4ng");
                sb.append("someThi5ng");
                sb.append("someThi6ng");
                a = sb.toString();
            }
            System.out.println("Way1=" + (System.currentTimeMillis() - time));
        }
    
        private static void doWay2(long count) {
            StringBuilder sb2 = new StringBuilder();
            time = System.currentTimeMillis();
            for (long i = 0; i < count; i++) {
                sb2.setLength(0);
                sb2.append("someThin1g");
                sb2.append("someThin2g");
                sb2.append("someThin3g");
                sb2.append("someThin4g");
                sb2.append("someThin5g");
                sb2.append("someThin6g");
                a = sb2.toString();
            }
            System.out.println("Way2=" + (System.currentTimeMillis() - time));
        }
    
        private static void doWay3(long count) {
            time = System.currentTimeMillis();
            StringBuilder sb3;
            for (long i = 0; i < count; i++) {
                sb3 = new StringBuilder();
                sb3.append("someThing1");
                sb3.append("someThing2");
                sb3.append("someThing3");
                sb3.append("someThing4");
                sb3.append("someThing5");
                sb3.append("someThing6");
                a = sb3.toString();
            }
            System.out.println("Way3=" + (System.currentTimeMillis() - time));
        }
    }
    

    考虑到函数执行顺序对程序的影响,按照多次排列规则变化函数顺序,那么得到以下数据(注:我是在64位window10机器上进行测试的,数据可能因为瞬时的CPU,磁盘占用,内存变化等因素影响,建议自己测试实验哈(=゚ω゚)ノ)

    Way1=5633 Way2=5263  Way3=9774
    Way1=5530 Way3=10824 Way2=5126
    Way2=5034 Way1=4960  Way3=10353
    Way2=5168 Way3=9965  Way1=5505
    Way3=8350 Way1=5029  Way2=4958
    Way3=7613 Way2=5164  Way1=4917
    

    综合统计,way1 总共最小耗时2次 ,way2 总共最小耗时4次,way3 总共最小耗时0次,所以way2属于最优解,即 setLength(0); 最优解

    相关文章

      网友评论

          本文标题:关于StringBuilder清空方式的比较

          本文链接:https://www.haomeiwen.com/subject/tzriqrtx.html