我正在看约翰的答案here,并认为它很漂亮。我想知道是否可以使用if语句进一步改进,但我不确定if语句是否会表现更好。
if语句是否比更改String的值“花费更多”?
String prefix = "";
for (String serverId : serverIds) {
sb.append(prefix);
prefix = ",";
sb.append(serverId);
}
VS
String prefix = "";
for (String serverId : serverIds) {
sb.append(prefix);
if( prefix.equals( "" ) {
prefix = ",";
}
sb.append(serverId);
}
答案 0 :(得分:2)
第二个版本肯定会慢一些。它不仅仅是一个if,而且是一个equals调用,并且大多数情况下两个比较字符串将是不同的,因此equals方法不会提前返回 - 相反它比简单的赋值做更多的工作(查看源代码字符串中的equals方法的详细信息)。
当然,大部分时间的可读性比速度更重要,而Guava Joiner可以帮助您编写非常清晰的代码。
答案 1 :(得分:1)
更多版本
boolean addPrefix = false;
for (String serverId : serverIds) {
if (addPrefix) { // it's better than String.equals
sb.append(','); // append char is faster than append String
} else {
addPrefix = true;
}
sb.append(serverId);
}
假设serverIds从不为空,这可以是一个替代
for (String serverId : serverIds) {
sb.append(serverId).append(',');
}
sb.deleteCharAt(sb.length() - 1);
如果serverIds是List,则不要使用for-each - 它会创建Iterator(Object)和Iterator.next检查并发修改
for (int i = 0; i < serverIds.size(); i++) {
if (i > 0) {
sb.append(',');
}
sb.append(serverId.get(i));
}
对于数组是
for (int i = 0; i < serverIds.length; i++) {
if (i > 0) {
sb.append(',');
}
sb.append(serverId[i]);
}