频繁拼接字符串请使用StringBuilder与StringBuffer

StringBuilder与StringBuffer

在需要进行频繁的字符串拼接,删除操作时,如果使用String对象,则每一次改变字符串内容都会创建一个新的String对象,十分耗费内存。这时候我们可以使用StringBuilder类StringBuffer类,不用创建新的对象,提高性能,加快速度


StringBuilder类

一个可变的字符序列。 该类不能保证同步。 该类被设计为在字符串缓冲区被单个线程使用的地方(作为一般情况)。 在可能的情况下,建议使用这个类别优先于StringBuffer因为它在大多数实施中将更快。

构造方法
构造方法描述
StringBuilder ()构造一个没有字符的字符串构建器,初始容量为16个字符
StringBuilder (int capacity)构造一个没有字符的字符串构建器,以及由 capacity参数指定的初始容量
StringBuilder (CharSequence seq)构造一个字符串构建器,其中包含与指定的 CharSequence相同的字符
StringBuilder (String str)构造一个初始化为指定字符串内容的字符串构建器

每个字符串构建器都具有容量。只要字符串构建器中包含的字符序列的长度不超过容量,则不需要分配新的内部缓冲区。如果内部缓冲区溢出,则会自动变大

StringBuilder类有两个改变内部缓冲区大小的方法

void ensureCapacity(int minimumCapacity)

void trimToSize()

它们调用StringBuilder继承的抽象类AbstractStringBuilder的方法

void expandCapacity(int minimumCapacity) {
        int newCapacity = value.length * 2 + 2;
        if (newCapacity - minimumCapacity < 0)
            newCapacity = minimumCapacity;
        if (newCapacity < 0) {
            if (minimumCapacity < 0) // overflow
                throw new OutOfMemoryError();
            newCapacity = Integer.MAX_VALUE;
        }
        value = Arrays.copyOf(value, newCapacity);
    }

public void trimToSize() {
        if (count < value.length) {
            value = Arrays.copyOf(value, count);
        }
    }

缓冲区大小调整通过它实现的char数组进行复制操作,转移到更大的数组中从而扩容

常用方法

StringBuilder append (object):将object添加到序列后

object可以是boolean,char,int,long,double,String基本类型,也可以是char[]数组,Object对象,StringBuffer对象

StringBuilder delete (int start,int end):删除序列中start到end索引的子串

StringBuilder deleteCharAt (int index):删除指定索引的字符

StringBuilder insert (int offset,object):在offset索引开始插入object

object可以是boolean,char,int,long,float,double,String,char[]数组,Object对象

StringBuilder indexOf (String str):返回str串首次在序列中出现的索引

StringBuilder lastIndexOf (String str):返回str串最后一次在序列中出现的索引

StringBuilder reverse ():序列反转

StringBuilder setCharAt (int index,char c):替换索引的字符为c

String subSequence (int start,int end):截取指定索引间的子串

String toString ():返回此序列的字符串


区别

StringBuilder实例不能安全使用多线程。 如果需要同步,那么建议使用StringBuffer

通常应该使用StringBuilder类,因为它支持所有相同的操作,但它更快,因为它不执行同步。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值