我試圖弄清楚何時使用或爲什麼capacity()
方法不同於length()
方法的StringBuilder
或StringBuffer
類。StringBuilder中的length()和capacity()方法之間的區別
我已經搜索堆棧溢出,並設法拿出this的答案,但我不明白它與length()
方法的區別。我也訪問過this網站,但這對我來說幫助更少。
我試圖弄清楚何時使用或爲什麼capacity()
方法不同於length()
方法的StringBuilder
或StringBuffer
類。StringBuilder中的length()和capacity()方法之間的區別
我已經搜索堆棧溢出,並設法拿出this的答案,但我不明白它與length()
方法的區別。我也訪問過this網站,但這對我來說幫助更少。
StringBuilder
是建立文本。在內部,它使用一組字符來存放您添加到其中的文本。 capacity
是數組的大小。 length
是該數組中多少數據當前由應該使用的文本填充。因此,與:
StringBuilder sb = new StringBuilder(1000);
sb.append("testing");
capacity()
是1000(有空間用於1000個字符需要用較大的一個被替換的內部陣列之前),和length()
是7(有陣列在七個有意義字符)。
的能力是非常重要的,因爲如果你嘗試更多的文本添加到StringBuilder
比它有能力,它分配一個新的,更大的緩存和複製內容到它,它有內存使用和性能的影響*。例如,StringBuilder
的默認容量是目前16個字符(它不記錄,並可以改變),所以:
StringBuilder sb = new StringBuilder();
sb.append("Singing:");
sb.append("I am the very model of a modern Major General");
...創建StringBuilder
與,副本"Singing:"
成數組,那麼必須創建一個新的數組,並在它添加第二個字符串之前將內容複製到它,因爲它沒有足夠的空間來添加第二個字符串。
* (無論是否重要取決於什麼代碼做)
字符串的長度總是小於或等於製造商的能力。長度爲構建器中存儲的字符串的實際大小,容量爲最大大小,它目前可以適用。
如果添加更多字符以超過其容量,構建器的容量會自動增加。在內部,字符串構建器是一個字符數組,因此構建器的容量是數組的大小。如果超出構建器的容量,則該數組將被一個新數組替換。新的數組大小爲2 * (the previous array size + 1)
。
既然你是新的Java的,我建議你這個技巧也有關的StringBuilder的效率:
您可以使用newStringBuilder(initialCapacity)
創建具有指定初始容量StringBuilder的。通過仔細選擇初始容量,可以使您的程序更高效。如果容量始終大於構建器的實際長度,則JVM將永遠不需要爲構建器重新分配內存。另一方面,如果容量太大,則會浪費存儲空間。您可以使用trimToSize()
方法將容量減小到實際大小。
我試圖解釋一下我能做到的最好的條件,所以我希望它有幫助。
'length()'是當前有多少東西在裏面。 'cacacity()'是它目前有多少空間。 – khelwood