5月 11th, 2008at 1:13

Tags:

J2SE1.5 StringBuilder

このエントリーをはてなブックマークに追加

同期のStringBufferと非同期のStringBuilder。Javadocには以下のようにかかれている。

StringBuilderのインスタンスは、複数のスレッドで使用するには安全ではありません。

このような同期が必要な場合は、StringBufferを使用することをお勧めします。

synchronizedとするとStringBufferは安全な分遅い。ほとんどの場合、スレッドセーフでなくてもいいと思うので、StringBuilderを使うといい。

単一スレッドならStringBuilder複数スレッドならStringBuffer

ちなみに5.0では「str + str」という式をjavacがStringBuilderを使った実装に修正してくれるので、文字連結が楽になる。

使用例

package com.daipresents.test.tiger;

import com.daipresents.test.SpeedCheck;

/** * StringBuilder.java。<pre> * </pre> */public class StringBuilderSpeed {

    public static void main(String[] args) {

        // StringBufferの場合        long start = SpeedCheck.getNowMillisecond();

        StringBuffer buff = new StringBuffer(8);

        for(int i = 0; i < 100000; i++){            buff.append("1234567890");        }

        long end = SpeedCheck.getNowMillisecond();

        SpeedCheck.printPassMillisecond(start, end);

        // StringBuilderの場合        start = SpeedCheck.getNowMillisecond();

        StringBuilder buil = new StringBuilder();

        for(int i = 0; i < 100000; i++){            buil.append("1234567890");        }

        end = SpeedCheck.getNowMillisecond();

        SpeedCheck.printPassMillisecond(start, end);

    }}

実行結果

millsecond = 109  << StringBuffermillsecond = 94   << StringBuilder
このエントリーをはてなブックマークに追加