dT*blog

design and programming

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 人間としては、「+」で文字列結合するのは、スゴク違和感とか罪悪感があるんだけど…。

Posted by dT by 17:19

トラックバック

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

コメント




保存しますか?

(書式を変更するような一部のHTMLタグを使うことができます)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30