文字列の連結を効率的にしたい
javaでは文字列の連結をする場合、
String str = "a"; str += "b"; str += "c";
というように、+演算子を使い実装することができます。
ただ、この方法は効率が悪いようです。
上のコードは以下の同様なコードとしてコンパイルされるようです。確か。
String str = "a"; str = new StringBuffer().append(str).append("b").toString; str = new StringBuffer().append(str).append("c").toString;
オブジェクトの作成をしているので、パフォーマンスの低下に繋がります。
String str = "a" + "b" + "c";
のように書くと、
String str = new StringBuffer().append("a").append("b").append("c").toString;
のようなコードとしてコンパイルされます。
オブジェクトが一つ作成されているだけなので、さっきのよりはパフォーマンスが良いと思います。
StringBufferを使おう
例えば、このようなソースでは、
String str = "a"; str += "b"; str += "c";
以下に書き換えましょう
StringBuffer stb = new StringBuffer("a"); stb.append("b"); stb.append("c"); String str = stb.toString();
StringBufferの初期バッファ
標準ではStringBufferは16文字分のバッファを構築します。
領域が不足すると、まず、倍のサイズの別のオブジェクトを生成します。そして、古いオブジェクトは破棄されます。
生成 ↓ 破棄
という無駄な処理を回避するためにも、バッファをどのくらい確保するのは宣言したほうが良いと思われます。
StringBuffer stb = new StringBuffer(100);