11
2009

StringとStringBuilderによる文字列置換の速度差

CATEGORYJava
文字列をあるパターンに従い、単純に(正規表現などを使わない)置換するような処理。
以下、Java 6 の環境での結果。

とっさに書きがちな String を使ったコード。
String result = s;
for (Map.Entry<String, String> m : mapping.entrySet()) {
result = result.replace(m.getKey(), m.getValue());
}
return result;

StringBuilder (または StringBuffer)を使ったコード。
StringBuilder b = new StringBuilder(s);
for (Map.Entry<String, String> m : mapping.entrySet()) {
int i;
while ((i = b.indexOf(m.getKey())) > -1) {
b.replace(i, i + m.getKey().length(), m.getValue());
}
}
return b.toString();

30文字ほどの文字列、Map に80件ぐらいが入っている状態で、10000回ループして
  • String → 1.7秒
  • StringBuilder → 0.3秒
と5倍以上の速度差。そりゃ毎回String作ってたら遅いよな・・・。使用頻度の高い処理に実装するときは要注意。
スポンサーサイト

Tag: Java

0 Comments

Leave a comment