2011-08-16 64 views

回答

3

這樣做會帶來哪些優勢/優化?

我認爲這樣做沒有任何優勢。

我的建議是選擇比預期尺寸略大一點的初始尺寸...如果您的估算適中。如果你沒有估算的話,通過提供一個初始尺寸你將不會獲得太多收益。

使用顯着高估的初始大小不是一個好主意。它浪費了空間,而且JVM將不得不將所有那些在某些耗費CPU /內存週期的地方使用的字符清零。

[應該可以憑經驗確定低估和高估尺寸的成本,並與使用默認初始尺寸的成本進行比較。然而,這些數字可能取決於JIT優化器的性能如何,以及諸如內存複製速度有多快與可以將其復位速度有多快等。換句話說,它們將是特定於平臺的。]

7

的建議是因爲,默認構造函數將與大小16的初始化,並且只要超過它會這種能力創建一個新的。

因此,如果您確定知道您將使用多於16個空格,則應該使用更高的值對其進行初始化。

+2

StringBuilder沒有暗示'capacity'應該是2的冪。是的,每次增長時緩衝區翻倍,但這並不意味着用'StringBuilder'初始化並不是最理想的例如,它的初始大小爲100 –

+0

實際上,它的增長類似於這個'int newCapacity =(value.length + 1)* 2;',所以即使你從一開始,它也不會保持2的冪。 – msandiford

+0

@Oscar Gomez +1儘管使用了'StringBuilder \ Buffer',我從來沒有看過初始化時使用的默認值和容量的兩倍。 – MalsR