Pen*_*m10 6 java stringbuilder concatenation
我有这个代码来连接一些数组元素:
StringBuilder sb = new StringBuilder();
private RatedMessage joinMessage(int step, boolean isresult) {
sb.delete(0, sb.length());
RatedMessage rm;
for (int i = 0; i <= step; i++) {
if (mStack[i] == null)
continue;
rm = mStack[i].getCurrentMsg();// msg is built upfront, this just returns, it's a getter method call
if (rm == null || rm.msg.length() == 0)
continue;
if (sb.length() != 0) {
sb.append(", ");
}
sb.append(rm.msg);
}
rm.msg=sb.toString();
return rm;
}
Run Code Online (Sandbox Code Playgroud)
重要的是阵列最多可容纳10个项目,所以它并不多.
我的跟踪输出告诉我这个方法被称为18864次,在此方法中花费了16%的运行时间.我可以优化更多吗?
首先,我不会重用StringBuilder并始终创建新实例.这肯定会更快,因为它将允许GC使用年轻代堆区域.
另一个允许消除至少一个if语句的小技巧是重写你的代码,如下所示:
String separator = "";
for (int i = 0; i <= step; i++) {
...
sb.append(separator);
sb.append(rm.msg);
separator = ", ";
}
Run Code Online (Sandbox Code Playgroud)
一些想法:
1)是否用估计的最大容量初始化StringBuilder?这可以节省内部数组重新分配和复制所花费的时间。
2)也许您可以在循环中附加一个尾随逗号,并避免循环内字符串长度的条件。相反,请在方法末尾添加一个条件,并根据需要删除结尾的逗号。
| 归档时间: |
|
| 查看次数: |
2011 次 |
| 最近记录: |