lead to believe "+"演算子を使用して1行に文字列を追加すると、StringBuilderを使用するのと同じくらい効果的でした(そして目にはかなり良い)。今日は、変数と文字列を追加していたLoggerに速度の問題がありましたが、 "+"演算子を使用していました。だから私は素早くtest caseを作ったのですが、驚いたことに、StringBuilderを使う方が早いことがわかりました!単線の文字列連結の速度の差
基本は、4つの異なる方法(以下に示す)を使用して、それぞれの追加回数に対して平均20回の実行を使用します。最速のアルゴリズムからの百分率差の(ミリ秒単位)
結果、回
# of Appends 10^1 10^2 10^3 10^4 10^5 10^6 10^7 StringBuilder(capacity) 0.65 1.25 2 11.7 117.65 1213.25 11570 StringBuilder() 0.7 1.2 2.4 12.15 122 1253.7 12274.6 "+" operator 0.75 0.95 2.35 12.35 127.2 1276.5 12483.4 String.format 4.25 13.1 13.25 71.45 730.6 7217.15 -
グラフ。
私はそれは、各文字列の比較方法に違う、byte codeをチェックアウトしました。
ここでは、メソッドに使用しているものを示します。テストクラス全体を見ることができますhere。
public static String stringSpeed1(float a, float b, float c, float x, float y, float z){
StringBuilder sb = new StringBuilder(72).append("[").append(a).append(",").append(b).append(",").append(c).append("][").
append(x).append(",").append(y).append(",").append(z).append("]");
return sb.toString();
}
public static String stringSpeed2(float a, float b, float c, float x, float y, float z){
StringBuilder sb = new StringBuilder().append("[").append(a).append(",").append(b).append(",").append(c).append("][").
append(x).append(",").append(y).append(",").append(z).append("]");
return sb.toString();
}
public static String stringSpeed3(float a, float b, float c, float x, float y, float z){
return "["+a+","+b+","+c+"]["+x+","+y+","+z+"]";
}
public static String stringSpeed4(float a, float b, float c, float x, float y, float z){
return String.format("[%f,%f,%f][%f,%f,%f]", a,b,c,x,y,z);
}
私はfloat、ints、およびstringsで試しました。これらのすべては、ほぼ同じ時間差を示しています。
質問
- 「+」演算子は明らかに同じバイトコードになってきていない、と時間が最適とは非常に異なっています。だから何を与える?
- 100と10000の間のアルゴリズムの動作は非常に奇妙なので、誰でも説明がありますか?
アルゴリズムの動作が100と.... ??? – ChrisCM
固定、それは何らかの理由でそれをカットオフ – greedybuddha
大きな質問は、それをバックアップするための研究とデータです。 +1 – syb0rg