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
    