都說如果有頻繁的String拼接(String=str+str)時,換用StringBuilder會比較好。
具體也沒比較過性能有多少差別。
這次做了個實驗看看效果差別多大。
硬件環境是:華為A9,比較老。
具體代碼如下:
一個2維int矩陣,用這些數據來拼接字符串
private int rowlength = 20;
private int length = 300;
private int[][] intMatrix = new int[rowlength][length];
private Random ran = new Random();
然后產生隨機int,拼接和StringBuilder都是基于這個矩陣,才6000個整數。
for (int i = 0; i < rowlength; i++) {
for (int j = 0; j < length; j++) {
intMatrix[i][j] = ran.nextInt();
}}
拼接:
private void doJoin() {
String rowStr = "";
Log.d("mooc", "doJoin start:");
for (int i = 0; i < rowlength; i++) {
for (int j = 0; j < length; j++) {
rowStr = rowStr + intMatrix[i][j];
rowStr = rowStr + ",";
}
Log.d("mooc", "doJoin row:" + i);
}
Log.d("mooc", "doJoin rowStr:" + rowStr.length());
}
很簡單的拼接,并每次換行打點log看時間
log結果:耗時近40秒,而且越到后面拼接的字符串越大每次拼接耗時也越長,不可思
StringBuilder:
private void doBld() {
StringBuilder rowStr = new StringBuilder();
Log.d("mooc", "doBld start:");
for (int i = 0; i < rowlength; i++) {
for (int j = 0; j < length; j++) {
rowStr.append(intMatrix[i][j]);
rowStr.append(",");
}
Log.d("mooc", "doBld row:" + i);
}
Log.d("mooc", "doBld rowStr:" + (rowStr.toString()).length());
}
Log結果:耗時16毫秒,瞬間完成
拼接和StringBuilder果然差距很多,尤其拼接很多的時候