StringBuffer 対 StringBuilder

J2SE 5.0 から StringBuilder クラスが導入された。

このクラスは、ほとんどの実装で高速に実行されるので、可能な場合は、StringBuffer よりも優先して使用することをお勧めします。

ということで、実際のところどんなもんか試してみた。

ソース。100000回ほど繰り返してみる。

public static void main(String[] args) {

StringBuffer buf; StringBuilder builder;
long start, end;
// StringBuffer start = System.currentTimeMillis(); buf = new StringBuffer(); for (int i = 0; i < 1000000; i++) { buf.append("a"); } end = System.currentTimeMillis(); System.out.println("StringBuffer:" + (end - start));
// StringBuilder start = System.currentTimeMillis(); builder = new StringBuilder(); for (int i = 0; i < 1000000; i++) { builder.append("a"); } end = System.currentTimeMillis(); System.out.println("StringBuilder:" + (end - start)); }

実行結果は以下のとおり。環境は、win XP/Pen4 3.0GHz。

StringBuffer : 297
StringBuilder : 156

おお、それなりの結果が返ってきた!

同期化する場合だけは StringBuffer クラスを使用しなくちゃいけないらしいけど、そんなケースは稀なわけで。これからは積極的に StringBuilder を使おうっと。

そういえば、AS3 にも開発途中までは StringBuilder クラスというのがあった気がする。どこに行ってしまったんだろう。Java 人間としては、「+」で文字列結合するのは、スゴク違和感とか罪悪感があるんだけど…。

このエントリーのトラックバックURL
http://www.deftrash.com/admin/mt4/mt-tb.cgi/353