亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java中StringBuffer的length()和capacity()方法對比

 更新時間:2021年07月06日 08:46:44   作者:石頭剪刀布_  
這篇文章主要介紹了java中StringBuffer的length()和capacity()方法對比,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

StringBuffer的length()和capacity()

StringBuffer類和String類差不多,都是字符串類,只是StringBuffer在對字符串進行修改時不會生成新的對象,所以效率相對較高,占用空間也小。

length()方法和capacity()方法都是獲取StringBuffer的長度。

length()返回字符串的實際長度;

capacity()返回字符串所占容器的總大小。

舉例:

這里寫圖片描述

可以看到:

1.StringBuffer的的初始大小為(16+初始字符串長度)即capacity=16+初始字符串長度;

2.一旦length大于capacity時,capacity便在前一次的基礎(chǔ)上加1后倍增;

例如:

length=1;capacity=17;//初始長度
length=5;capacity=17;//
length=17;capacity=17;//
length=18;capacity=(capacity+1)*2=36;//第一次倍增
............
length=37;capacity=(capacity+1)*2=74;//第二次倍增
............

但有如下特殊情況:

    StringBuffer sb3=new StringBuffer("a");
        System.out.println("length="+sb3.length());//length=1
        System.out.println("capacity="+sb3.capacity());//capacity=17;
        System.out.println("--------------------");
        sb3.append("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
        System.out.println("length="+sb3.length());//length=20;
        System.out.println("capacity="+sb3.capacity());//capacity=40;

當(dāng)length>capacity時,capacity倍增仍達不到length的長度,這種現(xiàn)象稱為跨階,此時,capacity將根據(jù)length的實際大小設(shè)置長度,此后將按照直接倍增的方式增長(不將length+1)

StringBuffer類初始容量及擴容

StringBuffer類可以創(chuàng)建可修改的字符串序列

該類有StringBuffer(),StringBuffer(int size),StringBuffer(String s)三個改造方法。

1.StringBuffer()的初始容量可以容納16個字符,當(dāng)該對象的實體存放的字符的長度大于16時,實體容量就自動增加。StringBuffer對象可以通過length()方法獲取實體中存放的字符序列長度,通過capacity()方法來獲取當(dāng)前實體的實際容量。

2.StringBuffer(int size)可以指定分配給該對象的實體的初始容量參數(shù)為參數(shù)size指定的字符個數(shù)。當(dāng)該對象的實體存放的字符序列的長度大于size個字符時,實體的容量就自動的增加。以便存放所增加的字符。

3.StringBuffer(String s)可以指定給對象的實體的初始容量為參數(shù)字符串s的長度額外再加16個字符。當(dāng)該對象的實體存放的字符序列長度大于size個字符時,實體的容量自動的增加,以便存放所增加的字符。

接下來介紹StringBuffer()怎樣擴容:

首先我們需要知道StringBuffer和StringBuilder類都繼承了抽象類AbstractStringBuilder類;

源碼都調(diào)用父類來進行初始化:

StringBuffer(String s)的初始化:

擴容算法:

使用append()方法在字符串后面追加?xùn)|西的時候,如果長度超過了該字符串存儲空間大小了就需要進行擴容:構(gòu)建新的存儲空間更大的字符串,將久的復(fù)制過去;

再進行字符串a(chǎn)ppend添加的時候,會先計算添加后字符串大小,傳入一個方法:ensureCapacityInternal 這個方法進行是否擴容的判斷,需要擴容就調(diào)用expandCapacity方法進行擴容:

嘗試將新容量擴為大小變成2倍+2 if 判斷一下 容量如果不夠,直接擴充到需要的容量大小。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論