Method concatenates strings using + in a loop
The method seems to be building a String using concatenation in a loop. In each iteration, the String is
converted to a StringBuffer/StringBuilder, appended to, and converted back to a String. This can lead to a
cost quadratic in the number of iterations, as the growing string is recopied in each iteration.
Better performance can be obtained by using a StringBuffer (or StringBuilder in Java 1.5) explicitly.
字符串串联使用方法在一个循环+
**该方法似乎是建立在循环使用字符串串联。在每次迭代中,字符串转换为一个StringBuffer / StringBuilder的,附加到并转换回为String。这可能导致成本的二次迭代,因为不断增长的字符串是在每次迭代中重新复制。
更好的性能,可使用StringBuffer(或StringBuilder的)会更好一些。**
public static String queryOneRecord(final SQLiteDatabase db, final String tableName, final String[] columns,
final String splitStr, final String selection, final String[] selectionArgs,
final String orderBy) {
Cursor cs = db.query(tableName, columns, selection, selectionArgs, null, null, orderBy);
// String returnstr = null;
// int columnsLength = 0;
// if (columns != null) {
// columnsLength = columns.length;
// }
// if (cs.moveToNext()) {
// returnstr = "";
// String columnsVale = null;
// for (int j = 0; j < columnsLength; j++) {
// columnsVale = cs.getString(cs.getColumnIndex(columns[j]));
// if (columnsVale != null) {
// returnstr += columnsVale;
// }
// if (j != columnsLength - 1) {
// returnstr += splitStr;
// }
// }
// }
// cs.close();
//
// return returnstr;
StringBuffer returnstr = new StringBuffer();
int columnsLength = 0;
if (columns != null) {
columnsLength = columns.length;
}
if (cs.moveToNext()) {
String columnsVale = null;
for (int j = 0; j < columnsLength; j++) {
columnsVale = cs.getString(cs.getColumnIndex(columns[j]));
if (columnsVale != null) {
returnstr.append(columnsVale);
}
if (j != columnsLength - 1) {
returnstr.append(splitStr);
}
}
}
cs.close();
return returnstr.toString();
}
StringBuffer returnstr = new StringBuffer();
// String returnstr = null;
/** StringBuffer new/delete/setLength 清空数据效率 setLength 最高 */
returnstr.setLength(0);
// returnstr = "";
另外,百度查到如果要用到StringBuffer 清空数据,效率 setLength(0)>new StringBuffer(“”)>delete;