Effective Java 讀書筆記: Item 38 - 注意串接字串的效率

最近發覺不少人沒注意到這件事, 寫一下心得。

Joel 有寫一篇很長的描述, 說明串接字串的效率問題, 有興趣的話值得一讀。結論是, 若一直用 "+=" 的寫法 (或是 C 的 strcat ) 串接 N 個字串, 效率是 O(N^2)。Java 有提供 class StringBuffer 和 StringBuilder 提供 O(N) 的實作。做法是每次要 reallocate array 時就要兩倍的空間, 這樣 amortized time 就會是 O(N)。並且最多只浪費一半的空間。

StringBuffer 和 StringBuilder 都是繼承 AbstractStringBuilder, 將主要運算轉包給父類別。兩者的差別是 StringBuffer 的方法有加上 synchronized, 也就是說, StringBuffer 是 thread-safe, 而 StringBuilder 不是。所以, 在使用單一 thread 的情況下 (通常如此), 應該使用 StringBuilder 以獲得較快的時間。

附帶一提, 若目的是 join 的話, 用 Apache Commons LangStringUtils.join() 會比自己用 StringBuilder 刻來得省事。

留言

這個網誌中的熱門文章

virtualbox 使用 USB 裝置

熟悉系統工具好處多多

如何 git merge 更改檔名的檔案