浅谈StringBuffer类初始容量及扩容

一、类图来一发

输入图片说明

二、Stringbuffer 构造方法概述

StringBuffer类能够建立可修改的字符串序列。该类有StringBuffer(),StringBuffer(int size),StringBuffer(String s)三个改造方法。算法

1.StringBuffer()的初始容量能够容纳16个字符,当该对象的实体存放的字符的长度大于16时,实体容量就自动增长。StringBuffer对象能够经过length()方法获取实体中存放的字符序列长度,经过capacity()方法来获取当前实体的实际容量。app

2.StringBuffer(int size)能够指定分配给该对象的实体的初始容量参数为参数size指定的字符个数。当该对象的实体存放的字符序列的长度大于size个字符时,实体的容量就自动的增长。以便存放所增长的字符。ui

3.StringBuffer(String s)能够指定给对象的实体的初始容量为参数字符串s的长度额外再加16个字符。当该对象的实体存放的字符序列长度大于size个字符时,实体的容量自动的增长,以便存放所增长的字符。对象

三、Stringbuffer 如何扩容

首先咱们须要知道StringBuffer和StringBuilder类都继承了抽象类AbstractStringBuilder类; 源码都调用父类来进行初始化:继承

1、StringBuffer()

输入图片说明

2、StringBuffer(int capacity)

输入图片说明

3、StringBuffer(String s)

输入图片说明

4、StringBuffer(CharSequence seq)

输入图片说明

5、扩容算法

输入图片说明

输入图片说明

使用append()方法在字符串后面追加东西的时候,若是长度超过了该字符串存储空间大小了就须要进行扩容:构建新的存储空间更大的字符串,将久的复制过去;再进行字符串append添加的时候,会先计算添加后字符串大小,传入一个方法:ensureCapacityInternal 这个方法进行是否扩容的判断,须要扩容就调用expandCapacity方法进行扩容:图片

输入图片说明

尝试将新容量扩为大小变成2倍+2 if 判断一下 容量若是不够,直接扩充到须要的容量大小。ci

输入图片说明

相关文章
相关标签/搜索