分析可變形字符串序列StringBuilder 以及 StringBuffer之默認大小與擴容


默認值初始化:

1.  首先明確 StringBuffer類與 StringBuilder類均繼承了抽象類 AbstractStringBuilder類

無參構造方法
2. 源碼中StringBuffer類和StringBuilder類初始化均調用父類的構造方法:
 
父類初始化:
 
子類默認傳入值16 給父類初始化字符數組
 
有參構造方法:
 
 
擴容算法:
使用append()方法在字符串后面追加東西的時候,如果長度超過了該字符串存儲空間大小了就需要進行擴容:構建新的存儲空間更大的字符串,將久的復制過去;
 
再進行字符串append添加的時候,會先計算添加后字符串大小,傳入一個方法: ensureCapacityInternal 這個方法進行是否擴容的判斷,需要擴容就調用 expandCapacity方法進行擴容:
 
嘗試將新容量擴為大小變成2倍+2   if 判斷一下 容量如果不夠,直接擴充到需要的容量大小;
 
 
隨便說說:
集合中也有類似情況,ArrayList 和LinkedList也有默認值10 ,也有擴容算法采用的是右偏移1 + 原有長度  ==也就是變為1.5倍大小 ,如果不夠用的話,就直接擴充到需要的大小;
 
String 類有一個  trim()方法 和  StringBuffer 與  StringBuilder類有一個 trimToSize()方法需要節約內存的時候可以使用

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM