淺談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

輸入圖片說明

相關文章
相關標籤/搜索