java StringBuffer/StringBuilder
StringBufferとStringBuilderでほぼ同等の機能を備えた2つだけど
StringBuilderを使うことがあまりなかった。
というのも、具体的なメリットをあまり感じられなかったから。
両者の違いはスレッドセーフの有無
すなわちsynchronizedであるかどうか、ということ。
正直、そんな違わないでしょ、っていうのもあったり。。。
ってなわけで、ちょっと計測。
同一回数のappendでどの程度時間に差が発生するか?
以下、ソース。
import java.util.Random;
public class SpeedTest {
public static void main(String[] args) {
System.out.println("start testBuffer");
testBuffer();
System.out.println("start testBuilder");
testBuilder();
}
static final int roopCount = 10000000;
static void testBuffer() {
long begin = System.currentTimeMillis();
StringBuffer buf = new StringBuffer();
Random rnd = new Random();
for (int i = 0 ; i < roopCount ; ++i) {
buf.append(rnd.nextInt(9));
}
long end = System.currentTimeMillis();
System.out.println(end - begin);
}
static void testBuilder() {
long begin = System.currentTimeMillis();
StringBuilder buf = new StringBuilder();
Random rnd = new Random();
for (int i = 0 ; i < roopCount ; ++i) {
buf.append(rnd.nextInt(9));
}
long end = System.currentTimeMillis();
System.out.println(end - begin);
}
}
結果は・・・・・・・
start testBuffer
425
start testBuilder
331
ループ回数を色々変えてやってみても、だいたい割合は同じくらい。
75%くらい早くなる。
synchronizedってこんなに遅いんだ、と実感。