天天看點

java StringBuffer,StringBuilder,String自身連接配接效率對比

當我們僅僅需要a+b 的時候,兩個字元串連結任何方法的效率基本一樣,都在0.0001毫秒内就可以完成。不過如果需要1萬次,10000萬次,就會發現string自身的join速度顯著下降

輸出

StringBuffer 時間7

StringBuild 時間3

String 自身連結 時間470

如果改成10萬次,那麼String基本跑不動了。

測試結果

StringBuffer 時間33

StringBuild 時間13

String 自身連結 時間46068

幾乎幾何級别增加。

各位客官可能會問StringBuffer 和 StringBuilder有什麼差別

StringBuilder

一個可變的字元序列。此類提供一個與 StringBuffer 相容的 API,但不保證同步。該類被設計用作 StringBuffer 的一個簡易替換,用在字元串緩沖區被單個線程使用的時候(這種情況很普遍)。如果可能,建議優先采用該類,因為在大多數實作中,它比 StringBuffer 要快。

在 StringBuilder 上的主要操作是 append 和 insert 方法,可重載這些方法,以接受任意類型的資料。每個方法都能有效地将給定的資料轉換成字元串,然後将該字元串的字元追加或插入到字元串生成器中。append 方法始終将這些字元添加到生成器的末端;而 insert 方法則在指定的點添加字元。

例如,如果 z 引用一個目前内容為 “start” 的字元串的生成器對象,則該方法調用 z.append(“le”) 将使字元串生成器包含 “startle”,而 z.insert(4, “le”) 将更改字元串生成器,使之包含 “starlet”。

通常,如果 sb 引用 StringBuilder 的執行個體,則 sb.append(x) 和 sb.insert(sb.length(), x) 具有相同的效果。每個字元串生成器都有一定的容量。隻要字元串生成器所包含的字元序列的長度沒有超出此容量,就無需配置設定新的内部緩沖區。如果内部緩沖區溢出,則此容量自動增大。

将 StringBuilder 的執行個體用于多個線程是不安全的。如果需要這樣的同步,則建議使用 StringBuffer。

首發位址: –