Java講座

最適化の章
5.4. 文字列の連結
『目的』

文字列の連結方法を改善して実行速度を上げましょう。

『Before』

文字列の連結には"+"演算子を使うことができます。
String str = null;

for (int i = 0; i < max; i++) {
    str += "0123456789012345678901234567890123456789";
}
内部的な動きとして、2つの文字列が結合されるときはその両方の内容がコピーされます。
n個の文字列を結合するのに"+"演算子を繰り返し使うと、nに関して二次の時間を要します。

『After』

StringBufferによる文字列連結を導入します。
String str = null;
StringBuffer strbuf = new StringBuffer();

for (int i = 0; i < max; i++) {
    strbuf.append("0123456789012345678901234567890123456789");
}
str = strbuf.toString();
初期容量に気を配ることでさらにパフォーマンスを上げられます。
デフォルトの初期容量は一般的には 16 文字分しか取られていません。

容量が足りなくなったらその都度新たな領域を確保して文字列をコピーする動作が行われます。
どの程度の文字列が加わるのか推測がつくのならば初期容量を設定しておきましょう。
StringBuffer str = new StringBuffer(max * 40);

for (int i = 0; i < max; i++) {
    str.append("0123456789012345678901234567890123456789");
}



『まとめ』

あまりパフォーマンスを重視しない場合は"+"演算子でも構いません。
繰り返し結合して文字列を構築する場合はStringBufferを使いましょう。
初期容量を設定するとさらにパフォーマンスが上がります。
前のページ   次のページ

当ページ・当社へのご意見やご感想があればお手数ですが「お問い合わせ」までお願いいたします。
当社への就職をお考えの方は「採用情報ページ」までお願いいたします。
C言語を学びたい方は「C言語講座」もどうぞ。