假设我正在构建一组字符串,其中每个字符串都是下一个的前缀。例如,假设我编写了一个函数:
public Set<String> example(List<String> strings) {
Set<String> result = new HashSet<>();
String incremental = "";
for (String s : strings) {
incremental = incremental + ":" + s;
result.add(incremental);
}
return result;
}
值得使用StringBuilder而不是串联重写它吗?显然,这样做可以避免在循环的每次迭代中构造一个新的StringBuilder,但是我不确定这是否对大型列表有显着的好处,或者您通常希望通过在循环中使用StringBuilders避免的开销仅仅是不必要的String构造。
[通常,您总是想循环使用StringBuilder
,因为O(n)算法变成O(n ^ 2)。但是,这已经是O(n ^ 2)。甚至所需的内存使用量都是O(n ^ 2)。看起来似乎并不重要,但是可能存在两个性能差异的因素。另外,从评论中您可以看到,读者期望StringBuilder
-不要让他们感到不必要的惊讶。
此答案仅对Java 8是正确的;正如@ user85421指出的那样,字符串的+
在StringBuilder
和更高版本中不再编译为Java 9操作。