StringBuffer清空 效率比较(欢迎大家一起交流)

StringBuffer 的清空有三种方法
  a. 重新创建一个新的StringBuffer对象让其重新指向
  b. 使用StringBuffer类提供的delete(int start, int end)方法:delete(0, sb.length())
  c. 使用StringBuffer类提供的setLength(int length)方法:setLength(0)

我在网上看到有人通过连续执行操作所需时间比较判断,但是由于StringBuffer是线程安全的,所以该方法必定不能得到客观的答案。
那么我们只有通过java底层的源代码来分析:
我们知道StringBuffer底层实际上是维护一个char数组
b方法底层使用System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)来对StringBuffer底层实际上是维护一个char数组重塑
c方法底层直接对StringBuffer底层维护的char数组做char[i]='\0'的操作

那么这两种方法究竟哪一种效率高呢,那么我们就可以写一个程序测试了,直接测试arraycopy方法和char[i]='\0'的操作
代码如下:
    static char[] tc;
    static char[] tm = new char[100000];
    static StringBuffer sb = new StringBuffer("");
    static int LENGTH;
    static int CAPACITY = 10;
    
    public static void main(String[] args) {
        // 首先初始化数组
        StringBufferTest.setValue();
        // 开始测试
        long t1 = System.currentTimeMillis();
        for(int i = 0; i < 500000; i ++) {
            StringBufferTest.copy();
        }
        System.out.println("delete方法:" + (System.currentTimeMillis() - t1));
        t1 = System.currentTimeMillis();
        for(int i = 0; i < 500000; i ++) {
            StringBufferTest.reset();
        }
        System.out.println("setLength方法:" + (System.currentTimeMillis() - t1));
        t1 = System.currentTimeMillis();
        for(int i = 0; i < 500000; i ++) {
            sb = new StringBuffer();
        }
        System.out.println("新创建:" + (System.currentTimeMillis() - t1));
    }
    
    public static void copy() {
        System.arraycopy(tc, 0, tc, 0, 0);
    }
    
    public static void reset() {
        if(0 > CAPACITY) {
            LENGTH = CAPACITY;
        }
        char[] copy = new char[CAPACITY];
        System.arraycopy(tc, 0, copy, 0, Math.min(tc.length, CAPACITY));
    }
    
    public static void  setValue() {
        tc = new char[10000];
        for(char i = 0; i < tc.length; i ++) {
            tc[i] = i;
        }
    }
输出结果可以自己测试,测试时间最短的是b,其次是c,最后是a,还有对c方式的模拟还不够客观,所以c和a的比较不太准确,可以对照源代码自己试试,欢迎交流
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值